diff --git a/docs/generators/go-server.md b/docs/generators/go-server.md index d57d712e154..a4fe043431a 100644 --- a/docs/generators/go-server.md +++ b/docs/generators/go-server.md @@ -22,6 +22,8 @@ These options may be applied as additional-properties (cli) or configOptions (pl |enumClassPrefix|Prefix enum with class name| |false| |featureCORS|Enable Cross-Origin Resource Sharing middleware| |false| |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| +|onlyInterfaces|Exclude default service creators from output; only generate interfaces| |false| +|outputAsLibrary|Exclude main.go, go.mod, and Dockerfile from output| |false| |packageName|Go package name (convention: lowercase).| |openapi| |packageVersion|Go package version.| |1.0.0| |router|Specify the router which should be used.|
**mux**
mux
**chi**
chi
|mux| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index a8a98fac36d..80d4db5916c 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -53,6 +53,8 @@ public class GoServerCodegen extends AbstractGoCodegen { protected String sourceFolder = "go"; protected Boolean corsFeatureEnabled = false; protected Boolean addResponseHeaders = false; + protected Boolean outputAsLibrary = false; + protected Boolean onlyInterfaces = false; public GoServerCodegen() { @@ -109,6 +111,18 @@ public class GoServerCodegen extends AbstractGoCodegen { optAddResponseHeaders.defaultValue(addResponseHeaders.toString()); cliOptions.add(optAddResponseHeaders); + + // option to exclude service factories; only interfaces are rendered + CliOption optOnlyInterfaces = new CliOption("onlyInterfaces", "Exclude default service creators from output; only generate interfaces"); + optOnlyInterfaces.setType("bool"); + optOnlyInterfaces.defaultValue(onlyInterfaces.toString()); + cliOptions.add(optOnlyInterfaces); + + // option to exclude main package (main.go), Dockerfile, and go.mod files + CliOption optOutputAsLibrary = new CliOption("outputAsLibrary", "Exclude main.go, go.mod, and Dockerfile from output"); + optOutputAsLibrary.setType("bool"); + optOutputAsLibrary.defaultValue(outputAsLibrary.toString()); + cliOptions.add(optOutputAsLibrary); /* * Models. You can write model files using the modelTemplateFiles map. * if you want to create one template for file, you can do so here. @@ -214,6 +228,22 @@ public class GoServerCodegen extends AbstractGoCodegen { additionalProperties.put("addResponseHeaders", addResponseHeaders); } + if (additionalProperties.containsKey("onlyInterfaces")) { + this.setOnlyInterfaces(convertPropertyToBooleanAndWriteBack("onlyInterfaces")); + } else { + additionalProperties.put("onlyInterfaces", onlyInterfaces); + } + + if (this.onlyInterfaces) { + apiTemplateFiles.remove("service.mustache"); + } + + if (additionalProperties.containsKey("outputAsLibrary")) { + this.setOutputAsLibrary(convertPropertyToBooleanAndWriteBack("outputAsLibrary")); + } else { + additionalProperties.put("outputAsLibrary", outputAsLibrary); + } + if (additionalProperties.containsKey(CodegenConstants.ENUM_CLASS_PREFIX)) { setEnumClassPrefix(Boolean.parseBoolean(additionalProperties.get(CodegenConstants.ENUM_CLASS_PREFIX).toString())); if (enumClassPrefix) { @@ -238,10 +268,12 @@ public class GoServerCodegen extends AbstractGoCodegen { * entire object tree available. If the input file has a suffix of `.mustache * it will be processed by the template engine. Otherwise, it will be copied */ + if (!outputAsLibrary) { + supportingFiles.add(new SupportingFile("main.mustache", "", "main.go")); + supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); + supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); + } supportingFiles.add(new SupportingFile("openapi.mustache", "api", "openapi.yaml")); - supportingFiles.add(new SupportingFile("main.mustache", "", "main.go")); - supportingFiles.add(new SupportingFile("Dockerfile.mustache", "", "Dockerfile")); - supportingFiles.add(new SupportingFile("go.mod.mustache", "", "go.mod")); supportingFiles.add(new SupportingFile("routers.mustache", sourceFolder, "routers.go")); supportingFiles.add(new SupportingFile("logger.mustache", sourceFolder, "logger.go")); supportingFiles.add(new SupportingFile("impl.mustache", sourceFolder, "impl.go")); @@ -363,6 +395,14 @@ public class GoServerCodegen extends AbstractGoCodegen { this.addResponseHeaders = addResponseHeaders; } + public void setOnlyInterfaces(Boolean onlyInterfaces) { + this.onlyInterfaces = onlyInterfaces; + } + + public void setOutputAsLibrary(Boolean outputAsLibrary) { + this.outputAsLibrary = outputAsLibrary; + } + @Override protected void updateModelForObject(CodegenModel m, Schema schema) { /**