Skip to content

Commit 8cbba73

Browse files
authored
[Go] skip validator import if oneOf discriminator lookup is enabled (#20497)
* move validator import into GoClientCodegen * add new example for oneof discriminator lookup * regenerate samples * add validator.v2 to go.mod if it is imported * regenerate samples
1 parent bc70f04 commit 8cbba73

38 files changed

+2397
-14
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
generatorName: go
2+
outputDir: samples/client/others/go/oneof-discriminator-lookup
3+
inputSpec: modules/openapi-generator/src/test/resources/3_0/go/spec-with-oneof-discriminator.yaml
4+
additionalProperties:
5+
useOneOfDiscriminatorLookup: "true"
6+
hideGenerationTimestamp: "true"

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -748,7 +748,6 @@ public ModelsMap postProcessModels(ModelsMap objs) {
748748
for (ModelMap m : objs.getModels()) {
749749
boolean addedTimeImport = false;
750750
boolean addedOSImport = false;
751-
boolean addedValidator = false;
752751
CodegenModel model = m.getModel();
753752

754753
List<CodegenProperty> inheritedProperties = new ArrayList<>();
@@ -830,11 +829,6 @@ public ModelsMap postProcessModels(ModelsMap objs) {
830829
imports.add(createMapping("import", "fmt"));
831830
}
832831

833-
if (model.oneOf != null && !model.oneOf.isEmpty() && !addedValidator && generateUnmarshalJSON) {
834-
imports.add(createMapping("import", "gopkg.in/validator.v2"));
835-
addedValidator = true;
836-
}
837-
838832
// if oneOf contains "null" type
839833
if (model.oneOf != null && !model.oneOf.isEmpty() && model.oneOf.contains("nil")) {
840834
model.isNullable = true;

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public class GoClientCodegen extends AbstractGoCodegen {
5656
public static final String MODEL_FILE_FOLDER = "modelFileFolder";
5757
public static final String WITH_GO_MOD = "withGoMod";
5858
public static final String USE_DEFAULT_VALUES_FOR_REQUIRED_VARS = "useDefaultValuesForRequiredVars";
59+
public static final String IMPORT_VALIDATOR = "importValidator";
5960
@Setter protected String goImportAlias = "openapiclient";
6061
protected boolean isGoSubmodule = false;
6162
@Setter protected boolean useOneOfDiscriminatorLookup = false; // use oneOf discriminator's mapping for model lookup
@@ -494,6 +495,11 @@ public ModelsMap postProcessModels(ModelsMap objs) {
494495
if (model.oneOf != null && !model.oneOf.isEmpty()) {
495496
imports.add(createMapping("import", "fmt"));
496497
addedFmtImport = true;
498+
499+
if (generateUnmarshalJSON && !useOneOfDiscriminatorLookup) {
500+
imports.add(createMapping("import", "gopkg.in/validator.v2"));
501+
additionalProperties.put(IMPORT_VALIDATOR, true);
502+
}
497503
}
498504

499505
// anyOf

modules/openapi-generator/src/main/resources/go/go.mod.mustache

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,7 @@ require (
99
{{#withAWSV4Signature}}
1010
github.com/aws/aws-sdk-go v1.34.14
1111
{{/withAWSV4Signature}}
12+
{{#importValidator}}
13+
gopkg.in/validator.v2 v2.0.1
14+
{{/importValidator}}
1215
)

modules/openapi-generator/src/main/resources/go/go.sum.mustache

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
1313
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
1414
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
1515
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
16+
{{#importValidator}}
17+
gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY=
18+
gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8=
19+
{{/importValidator}}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
openapi: 3.0.0
2+
info:
3+
title: Test
4+
version: 1.0.0
5+
paths: {}
6+
components:
7+
schemas:
8+
NestedObject1:
9+
required:
10+
- field1
11+
properties:
12+
field1:
13+
description: Specifies an action name to be used with the Android Intent class.
14+
type: string
15+
type:
16+
type: string
17+
NestedObject2:
18+
required:
19+
- field2
20+
properties:
21+
field1:
22+
description: Specifies an action name to be used with the Android Intent class.
23+
type: string
24+
type:
25+
type: string
26+
Object:
27+
oneOf:
28+
- $ref: '#/components/schemas/NestedObject1'
29+
- $ref: '#/components/schemas/NestedObject2'
30+
discriminator:
31+
propertyName: type
32+
mapping:
33+
ONE: '#/components/schemas/NestedObject1'
34+
TWO: '#/components/schemas/NestedObject2'

samples/client/others/go/oneof-anyof-required/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ module github.com/GIT_USER_ID/GIT_REPO_ID
33
go 1.18
44

55
require (
6+
gopkg.in/validator.v2 v2.0.1
67
)

samples/client/others/go/oneof-anyof-required/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJ
99
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
1010
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
1111
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
12+
gopkg.in/validator.v2 v2.0.1 h1:xF0KWyGWXm/LM2G1TrEjqOu4pa6coO9AlWSf3msVfDY=
13+
gopkg.in/validator.v2 v2.0.1/go.mod h1:lIUZBlB3Im4s/eYp39Ry/wkR02yOPhZ9IwIRBjuPuG8=

samples/client/others/go/oneof-anyof-required/model_object.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Compiled Object files, Static and Dynamic libs (Shared Objects)
2+
*.o
3+
*.a
4+
*.so
5+
6+
# Folders
7+
_obj
8+
_test
9+
10+
# Architecture specific extensions/prefixes
11+
*.[568vq]
12+
[568vq].out
13+
14+
*.cgo1.go
15+
*.cgo2.c
16+
_cgo_defun.c
17+
_cgo_gotypes.go
18+
_cgo_export.*
19+
20+
_testmain.go
21+
22+
*.exe
23+
*.test
24+
*.prof

0 commit comments

Comments
 (0)