Skip to content

Commit

Permalink
Merge ad039b3 into cb342ff
Browse files Browse the repository at this point in the history
  • Loading branch information
rpatali committed Mar 4, 2020
2 parents cb342ff + ad039b3 commit 3304f2f
Show file tree
Hide file tree
Showing 5 changed files with 362 additions and 63 deletions.
36 changes: 20 additions & 16 deletions codegen/method.go
Expand Up @@ -491,7 +491,7 @@ func (ms *MethodSpec) setRequestParamFields(
) error {
statements := LineBuilder{}

seenStructs, err := findStructs(funcSpec, packageHelper)
seenStructs, itrOrder, err := findStructs(funcSpec, packageHelper)
if err != nil {
return err
}
Expand All @@ -501,13 +501,13 @@ func (ms *MethodSpec) setRequestParamFields(
continue
}

for seenStruct, typeName := range seenStructs {
for _, seenStruct := range itrOrder {
if strings.HasPrefix(segment.BodyIdentifier, seenStruct) {
statements.appendf("if requestBody%s == nil {",
seenStruct,
)
statements.appendf("\trequestBody%s = &%s{}",
seenStruct, typeName,
seenStruct, seenStructs[seenStruct],
)
statements.append("}")
}
Expand All @@ -533,9 +533,10 @@ func (ms *MethodSpec) setRequestParamFields(

func findStructs(
funcSpec *compile.FunctionSpec, packageHelper *PackageHelper,
) (map[string]string, error) {
) (map[string]string, []string, error) {
fields := compile.FieldGroup(funcSpec.ArgsSpec)
var seenStructs = map[string]string{}
seenStructs := make(map[string]string)
itrOrder := make([]string, 0)
var finalError error

visitor := func(
Expand All @@ -552,17 +553,18 @@ func findStructs(
}

seenStructs[longFieldName] = typeName
itrOrder = append(itrOrder, longFieldName)
}

return false
}
walkFieldGroups(fields, visitor)

if finalError != nil {
return nil, finalError
return nil, nil, finalError
}

return seenStructs, nil
return seenStructs, itrOrder, nil
}

func (ms *MethodSpec) setEndpointRequestHeaderFields(
Expand Down Expand Up @@ -755,7 +757,8 @@ func (ms *MethodSpec) setClientRequestHeaderFields(

statements := LineBuilder{}
var finalError error
var seenOptStructs = map[string]string{}
seenOptStructs := make(map[string]string)
itrOrder := make([]string, 0)

// Scan for all annotations
visitor := func(
Expand All @@ -773,6 +776,7 @@ func (ms *MethodSpec) setClientRequestHeaderFields(
return true
}
seenOptStructs[longFieldName] = typeName
itrOrder = append(itrOrder, longFieldName)
return false
}

Expand All @@ -787,24 +791,24 @@ func (ms *MethodSpec) setClientRequestHeaderFields(
} else {
headerNameValuePair = "headers[%q]= string(*r%s)"
}
if len(seenOptStructs) != 0 {
if !field.Required {
closeFunction := ""
for seenStruct := range seenOptStructs {
for _, seenStruct := range itrOrder {
if strings.HasPrefix(longFieldName, seenStruct) {
statements.appendf("if r%s != nil {", seenStruct)
closeFunction = closeFunction + "}"
}
}

statements.appendf("if r%s != nil {", bodyIdentifier)
statements.appendf(headerNameValuePair, headerName, bodyIdentifier)
statements.append("}")

statements.append(closeFunction)
}
if field.Required {
} else {
statements.appendf(headerNameValuePair,
headerName, bodyIdentifier,
)
} else {
statements.appendf("if r%s != nil {", bodyIdentifier)
statements.appendf(headerNameValuePair, headerName, bodyIdentifier)
statements.append("}")
}
}
}
Expand Down
6 changes: 6 additions & 0 deletions examples/example-gateway/build/clients/bar/bar.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 3304f2f

Please sign in to comment.