Created
August 29, 2019 06:59
-
-
Save metrue/08606749d472bd269d5721ab72dfc6eb to your computer and use it in GitHub Desktop.
protobuf bug reproduce
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. | |
// source: backup_svc/backup_svc.proto | |
/* | |
Package backup_svc is a reverse proxy. | |
It translates gRPC into RESTful JSON APIs. | |
*/ | |
package backup_svc | |
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_MySvc_AwesomeEndpoint_0 = &utilities.DoubleArray{Encoding: map[string]int{"data": 0, "resource": 1, "tenant": 2, "cloud": 3, "type": 4, "id": 5}, Base: []int{1, 1, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0}, Check: []int{0, 1, 1, 3, 3, 3, 3, 2, 4, 5, 6, 7}} | |
) | |
func request_MySvc_AwesomeEndpoint_0(ctx context.Context, marshaler runtime.Marshaler, client MySvcClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { | |
var protoReq AwesomeEndpointRequest | |
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 | |
e int32 | |
ok bool | |
err error | |
_ = err | |
) | |
val, ok = pathParams["resource.tenant"] | |
if !ok { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource.tenant") | |
} | |
err = runtime.PopulateFieldFromPath(&protoReq, "resource.tenant", val) | |
if err != nil { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource.tenant", err) | |
} | |
val, ok = pathParams["resource.cloud"] | |
if !ok { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource.cloud") | |
} | |
err = runtime.PopulateFieldFromPath(&protoReq, "resource.cloud", val) | |
if err != nil { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource.cloud", err) | |
} | |
val, ok = pathParams["resource.type"] | |
if !ok { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource.type") | |
} | |
err = runtime.PopulateFieldFromPath(&protoReq, "resource.type", val) | |
if err != nil { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource.type", err) | |
} | |
protoReq.Resource.Type = Resource_Type(e) | |
val, ok = pathParams["resource.id"] | |
if !ok { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "resource.id") | |
} | |
err = runtime.PopulateFieldFromPath(&protoReq, "resource.id", val) | |
if err != nil { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "resource.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_MySvc_AwesomeEndpoint_0); err != nil { | |
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) | |
} | |
msg, err := client.AwesomeEndpoint(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) | |
return msg, metadata, err | |
} | |
// RegisterMySvcHandlerFromEndpoint is same as RegisterMySvcHandler but | |
// automatically dials to "endpoint" and closes the connection when "ctx" gets done. | |
func RegisterMySvcHandlerFromEndpoint(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 RegisterMySvcHandler(ctx, mux, conn) | |
} | |
// RegisterMySvcHandler registers the http handlers for service MySvc to "mux". | |
// The handlers forward requests to the grpc endpoint over "conn". | |
func RegisterMySvcHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { | |
return RegisterMySvcHandlerClient(ctx, mux, NewMySvcClient(conn)) | |
} | |
// RegisterMySvcHandlerClient registers the http handlers for service MySvc | |
// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "MySvcClient". | |
// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "MySvcClient" | |
// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in | |
// "MySvcClient" to call the correct interceptors. | |
func RegisterMySvcHandlerClient(ctx context.Context, mux *runtime.ServeMux, client MySvcClient) error { | |
mux.Handle("POST", pattern_MySvc_AwesomeEndpoint_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_MySvc_AwesomeEndpoint_0(rctx, inboundMarshaler, client, req, pathParams) | |
ctx = runtime.NewServerMetadataContext(ctx, md) | |
if err != nil { | |
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) | |
return | |
} | |
forward_MySvc_AwesomeEndpoint_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) | |
}) | |
return nil | |
} | |
var ( | |
pattern_MySvc_AwesomeEndpoint_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 1, 0, 4, 1, 5, 5, 1, 0, 4, 1, 5, 6, 2, 7}, []string{"v1", "tenants", "resource.tenant", "clouds", "resource.cloud", "resource.type", "resource.id", "scheduled_backup"}, "", runtime.AssumeColonVerbOpt(true))) | |
) | |
var ( | |
forward_MySvc_AwesomeEndpoint_0 = runtime.ForwardResponseMessage | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment