From f52301c898bb680bc47c83d635fdad6a86d90ee5 Mon Sep 17 00:00:00 2001 From: Sateesh Potturu Date: Wed, 22 Apr 2020 09:01:28 +0530 Subject: [PATCH] Support unwrapping gql method response type --- protoc-gen-gql/main.go | 21 +++++++++++++++++---- protoc-gen-gqlgencfg/main.go | 8 +------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/protoc-gen-gql/main.go b/protoc-gen-gql/main.go index 3ce1f57..c8d3d50 100644 --- a/protoc-gen-gql/main.go +++ b/protoc-gen-gql/main.go @@ -26,14 +26,21 @@ func main() { } serviceDirectives := false - if gogoimport, ok := Params(gen)["svcdir"]; ok { - serviceDirectives, err = strconv.ParseBool(gogoimport) + if v, ok := Params(gen)["svcdir"]; ok { + serviceDirectives, err = strconv.ParseBool(v) + if err != nil { + gen.Error(err, "parsing svcdir option") + } + } + unwrapResponse := false + if v, ok := Params(gen)["unwrapresponse"]; ok { + unwrapResponse, err = strconv.ParseBool(v) if err != nil { gen.Error(err, "parsing svcdir option") } } - p := &plugin{NewPlugin(), serviceDirectives} + p := &plugin{NewPlugin(), serviceDirectives, unwrapResponse} gen.CommandLineParameters(gen.Request.GetParameter()) gen.WrapTypes() @@ -60,6 +67,7 @@ func main() { type plugin struct { *Plugin serviceDirectives bool + unwrapResponse bool } func (p *plugin) GenerateImports(file *generator.FileDescriptor) {} @@ -255,7 +263,12 @@ func (p *plugin) renderMethod(methods []*Method) { } } else if typ, ok := p.Types()[m.OutputType]; ok { if !p.IsEmpty(typ) { - out = p.GqlModelNames()[typ] + if p.unwrapResponse { + field := typ.GetField()[0] + out = generator.CamelCase(field.GetName()) + } else { + out = p.GqlModelNames()[typ] + } } } diff --git a/protoc-gen-gqlgencfg/main.go b/protoc-gen-gqlgencfg/main.go index 156dfda..35b4183 100644 --- a/protoc-gen-gqlgencfg/main.go +++ b/protoc-gen-gqlgencfg/main.go @@ -112,7 +112,7 @@ func (p *plugin) Generate(file *generator.FileDescriptor) { cfg.Models[key] = typeMapEntry{Model: model, Fields: make(map[string]typeMapField)} } for _, f := range typ.DescriptorProto.GetField() { - name := toLowerCamelCase(f.GetName()) + name := ToLowerFirst(generator.CamelCase(f.GetName())) // TODO find a better way to check for gqlgencfg moretags if strings.Contains(f.GetOptions().String(), "gqlgencfg:resolve") { cfg.Models[key].Fields[name] = typeMapField{Resolver: true, FieldName: name} @@ -124,12 +124,6 @@ func (p *plugin) Generate(file *generator.FileDescriptor) { } } -func toLowerCamelCase(s string) string { - l := generator.CamelCase(s) - l = string(byte(l[0]) ^ ' ') + l[1:] - return l -} - type ( config struct { SchemaFilename []string `yaml:"schema,omitempty"`