Skip to content

Commit a820405

Browse files
authored
Merge pull request #1444 from lukasberanek-tpa/fix/single-allof-with-reference
fix: generate single `allOf` reference to avoid code duplication
2 parents 8609506 + 18c13b0 commit a820405

18 files changed

+1288
-32
lines changed

_testdata/positive/allOf.yml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,21 @@ paths:
168168
responses:
169169
'200':
170170
description: ok
171+
"/referencedAllOfNullable":
172+
post:
173+
operationId: referencedAllOfNullable
174+
description: referenced allOf, but requestBody contains nullable refs
175+
requestBody:
176+
content:
177+
application/json:
178+
schema:
179+
"$ref": "#/components/schemas/ReferencedAllOfNullable"
180+
multipart/form-data:
181+
schema:
182+
"$ref": "#/components/schemas/ReferencedAllOfNullable"
183+
responses:
184+
'200':
185+
description: ok
171186
components:
172187
schemas:
173188
Robot:
@@ -203,3 +218,17 @@ components:
203218
format: uuid
204219
location:
205220
"$ref": "#/components/schemas/Location"
221+
ReferencedAllOfNullable:
222+
type: object
223+
properties:
224+
location:
225+
"$ref": "#/components/schemas/Location"
226+
allOfLocation:
227+
type: object
228+
allOf:
229+
- "$ref": "#/components/schemas/Location"
230+
nullableAllOfLocation:
231+
type: object
232+
nullable: true
233+
allOf:
234+
- "$ref": "#/components/schemas/Location"

gen/schema_gen_sum.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,14 @@ func (g *schemaGen) allOf(name string, schema *jsonschema.Schema) (*ir.Type, err
489489
return nil, err
490490
}
491491

492+
// If there is only one schema in allOf, avoid merging to keep the reference.
493+
if len(schema.AllOf) == 1 {
494+
s := schema.AllOf[0]
495+
if s != nil {
496+
return g.generate(name, s, false)
497+
}
498+
}
499+
492500
mergedSchema, err := mergeNSchemes(schema.AllOf)
493501
if err != nil {
494502
return nil, err

internal/integration/test_allof/oas_client_gen.go

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

internal/integration/test_allof/oas_faker_gen.go

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

internal/integration/test_allof/oas_handlers_gen.go

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

internal/integration/test_allof/oas_interfaces_gen.go

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

0 commit comments

Comments
 (0)