FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

Generate param enums in operations · developgo/oapi-codegen@14fc88e · GitHub

Commit 14fc88e

Browse files
committed
Generate param enums in operations
This fixes oapi-codegen#603. The code skipped over enum values declared in inline parameters defined in operations. These now generate enum values correctly.
1 parent 2897cdc commit 14fc88e

5 files changed

Lines changed: 202 additions & 24 deletions

File tree

‎internal/test/parameters/parameters.gen.go‎

Lines changed: 168 additions & 19 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎internal/test/parameters/parameters.yaml‎

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,21 @@ paths:
486486
responses:
487487
default:
488488
$ref: "#/components/responses/SimpleResponse"
489-
489+
/enums:
490+
get:
491+
operationId: enumParams
492+
parameters:
493+
- name: enumPathParam
494+
description: Parameter with enum values
495+
in: query
496+
required: false
497+
schema:
498+
type: integer
499+
format: int32
500+
enum: [100, 200]
501+
responses:
502+
204:
503+
description: no content
490504
components:
491505
schemas:
492506
Object:

‎internal/test/server/server.gen.go‎

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎pkg/codegen/codegen.go‎

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -323,12 +323,21 @@ func GenerateTypeDefinitions(t *template.Template, swagger *openapi3.T, ops []Op
323323
}
324324
allTypes = append(allTypes, bodyTypes...)
325325

326-
paramTypesOut, err := GenerateTypesForOperations(t, ops)
326+
// Go through all operations, and add their types to allTypes, so that we can
327+
// scan all of them for enums. Operation definitions are handled differently
328+
// from the rest, so let's keep track of enumTypes separately, which will contain
329+
// all types needed to be scanned for enums, which includes those within operations.
330+
enumTypes := allTypes
331+
for _, op := range ops {
332+
enumTypes = append(enumTypes, op.TypeDefinitions...)
333+
}
334+
335+
operationsOut, err := GenerateTypesForOperations(t, ops)
327336
if err != nil {
328337
return "", fmt.Errorf("error generating Go types for component request bodies: %w", err)
329338
}
330339

331-
enumsOut, err := GenerateEnums(t, allTypes)
340+
enumsOut, err := GenerateEnums(t, enumTypes)
332341
if err != nil {
333342
return "", fmt.Errorf("error generating code for type enums: %w", err)
334343
}
@@ -348,7 +357,7 @@ func GenerateTypeDefinitions(t *template.Template, swagger *openapi3.T, ops []Op
348357
return "", fmt.Errorf("error generating union boilerplate: %w", err)
349358
}
350359

351-
typeDefinitions := strings.Join([]string{enumsOut, typesOut, paramTypesOut, allOfBoilerplate, unionBoilerplate}, "")
360+
typeDefinitions := strings.Join([]string{enumsOut, typesOut, operationsOut, allOfBoilerplate, unionBoilerplate}, "")
352361
return typeDefinitions, nil
353362
}
354363

‎pkg/codegen/operations.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -625,7 +625,7 @@ func GenerateParamsTypes(op OperationDefinition) []TypeDefinition {
625625
return append(typeDefs, td)
626626
}
627627

628-
// Generates code for all types produced
628+
// GenerateTypesForOperations generates code for all types produced within operations
629629
func GenerateTypesForOperations(t *template.Template, ops []OperationDefinition) (string, error) {
630630
var buf bytes.Buffer
631631
w := bufio.NewWriter(&buf)

0 commit comments

Comments
 (0)

Back | FazBrowse Home | New Git URL