Skip to content

Commit

Permalink
Support unwrapping gql method response type
Browse files Browse the repository at this point in the history
  • Loading branch information
sateeshpnv committed Apr 22, 2020
1 parent 7203dbe commit f52301c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 11 deletions.
21 changes: 17 additions & 4 deletions protoc-gen-gql/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand All @@ -60,6 +67,7 @@ func main() {
type plugin struct {
*Plugin
serviceDirectives bool
unwrapResponse bool
}

func (p *plugin) GenerateImports(file *generator.FileDescriptor) {}
Expand Down Expand Up @@ -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]
}
}
}

Expand Down
8 changes: 1 addition & 7 deletions protoc-gen-gqlgencfg/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand All @@ -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"`
Expand Down

0 comments on commit f52301c

Please sign in to comment.