diff --git a/docs/generators/go.md b/docs/generators/go.md index e8f9946fbcc..7120de8ba6b 100644 --- a/docs/generators/go.md +++ b/docs/generators/go.md @@ -29,6 +29,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl |structPrefix|whether to prefix struct with the class name. e.g. DeletePetOpts => PetApiDeletePetOpts| |false| |useOneOfDiscriminatorLookup|Use the discriminator's mapping in oneOf to speed up the model lookup. IMPORTANT: Validation (e.g. one and only one match in oneOf's schemas) will be skipped.| |false| |withAWSV4Signature|whether to include AWS v4 signature support| |false| +|withGoMod|Generate go.mod and go.sum| |true| |withXml|whether to include support for application/xml content type and include XML annotations in the model (works with libraries that provide support for JSON and XML)| |false| ## IMPORT MAPPING diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java index edc2ef10c09..43e7a7af86e 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenConstants.java @@ -429,4 +429,6 @@ public class CodegenConstants { "
  • setting additionalProperties: false in your schemas
  • "; public static final String FASTAPI_IMPLEMENTATION_PACKAGE = "fastapiImplementationPackage"; + + public static final String WITH_GO_MOD = "withGoMod"; } diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java index 99df1b1c325..38d2513ab3a 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractGoCodegen.java @@ -49,6 +49,7 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege protected boolean enumClassPrefix = false; protected boolean structPrefix = false; protected boolean generateInterfaces = false; + protected boolean withGoMod = false; protected String packageName = "openapi"; protected Set numberTypes; @@ -804,6 +805,10 @@ public abstract class AbstractGoCodegen extends DefaultCodegen implements Codege this.generateInterfaces = generateInterfaces; } + public void setWithGoMod(boolean withGoMod) { + this.withGoMod = withGoMod; + } + @Override public String toDefaultValue(Schema schema) { schema = unaliasSchema(schema); diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java index 47a9316b46d..4cbb6045ca0 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoClientCodegen.java @@ -56,6 +56,7 @@ public class GoClientCodegen extends AbstractGoCodegen { public static final String WITH_AWSV4_SIGNATURE = "withAWSV4Signature"; public static final String GENERATE_INTERFACES = "generateInterfaces"; public static final String MODEL_FILE_FOLDER = "modelFileFolder"; + public static final String WITH_GO_MOD = "withGoMod"; protected String goImportAlias = "openapiclient"; protected boolean isGoSubmodule = false; protected boolean useOneOfDiscriminatorLookup = false; // use oneOf discriminator's mapping for model lookup @@ -137,6 +138,8 @@ public class GoClientCodegen extends AbstractGoCodegen { disallowAdditionalPropertiesIfNotPresentOpt.setEnum(disallowAdditionalPropertiesIfNotPresentOpts); cliOptions.add(disallowAdditionalPropertiesIfNotPresentOpt); this.setDisallowAdditionalPropertiesIfNotPresent(true); + cliOptions.add(CliOption.newBoolean(WITH_GO_MOD, "Generate go.mod and go.sum", true)); + this.setWithGoMod(true); } /** @@ -262,6 +265,13 @@ public class GoClientCodegen extends AbstractGoCodegen { modelFileFolder = additionalProperties.get(MODEL_FILE_FOLDER).toString(); } + if (additionalProperties.containsKey(WITH_GO_MOD)) { + setWithGoMod(Boolean.parseBoolean(additionalProperties.get(WITH_GO_MOD).toString())); + additionalProperties.put(WITH_GO_MOD, withGoMod); + } else { + additionalProperties.put(WITH_GO_MOD, true); + } + // add lambda for mustache templates to handle oneOf/anyOf naming // e.g. []string => ArrayOfString additionalProperties.put("lambda.type-to-name", (Mustache.Lambda) (fragment, writer) -> writer.write(typeToName(fragment.execute()))); @@ -273,8 +283,10 @@ public class GoClientCodegen extends AbstractGoCodegen { supportingFiles.add(new SupportingFile("configuration.mustache", "", "configuration.go")); supportingFiles.add(new SupportingFile("client.mustache", "", "client.go")); supportingFiles.add(new SupportingFile("response.mustache", "", "response.go")); - supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); - supportingFiles.add(new SupportingFile("go.sum.mustache", "", "go.sum")); + if ((boolean)additionalProperties.get(WITH_GO_MOD)) { + supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); + supportingFiles.add(new SupportingFile("go.sum.mustache", "", "go.sum")); + } supportingFiles.add(new SupportingFile(".travis.yml", "", ".travis.yml")); supportingFiles.add(new SupportingFile("utils.mustache", "", "utils.go")); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java index ce22ca83f46..cbf73e2877b 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientCodegenTest.java @@ -291,4 +291,46 @@ public class GoClientCodegenTest { "httpRes, err := apiClient.PetAPI.PetDelete(context.Background()).Execute()"); } + @Test + public void testAdditionalPropertiesWithGoMod() throws Exception { + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("go") + .setInputSpec("src/test/resources/3_0/petstore_oas3_test.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")); + + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(configurator.toClientOptInput()).generate(); + System.out.println(files); + files.forEach(File::deleteOnExit); + + Path goModFile = Paths.get(output + "/go.mod"); + TestUtils.assertFileExists(goModFile); + Path goSumFile = Paths.get(output + "/go.sum"); + TestUtils.assertFileExists(goSumFile); + } + + @Test + public void testAdditionalPropertiesWithoutGoMod() throws Exception { + File output = Files.createTempDirectory("test").toFile(); + output.deleteOnExit(); + + final CodegenConfigurator configurator = new CodegenConfigurator() + .setGeneratorName("go") + .setInputSpec("src/test/resources/3_0/petstore_oas3_test.yaml") + .setOutputDir(output.getAbsolutePath().replace("\\", "/")) + .addAdditionalProperty(GoClientCodegen.WITH_GO_MOD, false); + + DefaultGenerator generator = new DefaultGenerator(); + List files = generator.opts(configurator.toClientOptInput()).generate(); + System.out.println(files); + files.forEach(File::deleteOnExit); + + Path goModFile = Paths.get(output + "/go.mod"); + TestUtils.assertFileNotExists(goModFile); + Path goSumFile = Paths.get(output + "/go.sum"); + TestUtils.assertFileNotExists(goSumFile); + } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java index 7ace9c09cab..c8650aa4f34 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/go/GoClientOptionsTest.java @@ -51,5 +51,6 @@ public class GoClientOptionsTest extends AbstractOptionsTest { verify(clientCodegen).setStructPrefix(GoClientOptionsProvider.STRUCT_PREFIX_VALUE); verify(clientCodegen).setWithAWSV4Signature(GoClientOptionsProvider.WITH_AWSV4_SIGNATURE); verify(clientCodegen).setUseOneOfDiscriminatorLookup(GoClientOptionsProvider.USE_ONE_OF_DISCRIMINATOR_LOOKUP_VALUE); + verify(clientCodegen).setWithGoMod(GoClientOptionsProvider.WITH_GO_MOD_VALUE); } } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java index ef8fa66558b..d23d34f2b5c 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/options/GoClientOptionsProvider.java @@ -36,6 +36,7 @@ public class GoClientOptionsProvider implements OptionsProvider { public static final boolean GENERATE_INTERFACES_VALUE = true; public static final boolean DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT_VALUE = true; public static final boolean USE_ONE_OF_DISCRIMINATOR_LOOKUP_VALUE = true; + public static final boolean WITH_GO_MOD_VALUE = true; @Override public String getLanguage() { @@ -56,6 +57,7 @@ public class GoClientOptionsProvider implements OptionsProvider { .put(CodegenConstants.WITH_AWSV4_SIGNATURE_COMMENT, "true") .put(CodegenConstants.DISALLOW_ADDITIONAL_PROPERTIES_IF_NOT_PRESENT, "true") .put(CodegenConstants.USE_ONEOF_DISCRIMINATOR_LOOKUP, "true") + .put(CodegenConstants.WITH_GO_MOD, "true") .put("generateInterfaces", "true") .put("structPrefix", "true") .build();