diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 761ba0f0c4cf..012b747f2b3a 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -27,6 +27,8 @@ sidebar_label: aspnetcore |useNewtonsoft|Uses the Newtonsoft JSON library.| |true| |newtonsoftVersion|Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+| |3.0.0-preview5-19227-01| |useDefaultRouting|Use default routing for the ASP.NET Core version. For 3.0 turn off default because it is not yet supported.| |true| +|enumNameSuffix|Suffix that will be appended to all enum names.| |Enum| +|enumValueNameSuffix|Suffix that will be appended to all enum value names.| |Enum| |classModifier|Class Modifier can be empty, abstract| || |operationModifier|Operation Modifier can be virtual, abstract or partial| |virtual| |buildTarget|Target to build an application or library| |program| 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 8a1c158c9f1d..5a8adae80812 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 @@ -218,6 +218,12 @@ public static enum ENUM_PROPERTY_NAMING_TYPE {camelCase, PascalCase, snake_case, public static final String MODEL_NAME_SUFFIX = "modelNameSuffix"; public static final String MODEL_NAME_SUFFIX_DESC = "Suffix that will be appended to all model names."; + public static final String ENUM_NAME_SUFFIX = "enumNameSuffix"; + public static final String ENUM_NAME_SUFFIX_DESC = "Suffix that will be appended to all enum names."; + + public static final String ENUM_VALUE_NAME_SUFFIX = "enumValueNameSuffix"; + public static final String ENUM_VALUE_NAME_SUFFIX_DESC = "Suffix that will be appended to all enum value names."; + public static final String GIT_HOST = "gitHost"; public static final String GIT_HOST_DESC = "Git host, e.g. gitlab.com."; diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java index 0e73bbc50d9d..6a24895fb7da 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractCSharpCodegen.java @@ -62,6 +62,8 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co protected String packageAuthors = "OpenAPI"; protected String interfacePrefix = "I"; + protected String enumNameSuffix = "Enum"; + protected String enumValueNameSuffix = "Enum"; protected String sourceFolder = "src"; @@ -361,6 +363,14 @@ public void processOpts() { } } + if (additionalProperties().containsKey(CodegenConstants.ENUM_NAME_SUFFIX)) { + setEnumNameSuffix(additionalProperties.get(CodegenConstants.ENUM_NAME_SUFFIX).toString()); + } + + if (additionalProperties().containsKey(CodegenConstants.ENUM_VALUE_NAME_SUFFIX)) { + setEnumValueNameSuffix(additionalProperties.get(CodegenConstants.ENUM_VALUE_NAME_SUFFIX).toString()); + } + // This either updates additionalProperties with the above fixes, or sets the default if the option was not specified. additionalProperties.put(CodegenConstants.INTERFACE_PREFIX, interfacePrefix); } @@ -1003,6 +1013,14 @@ public void setInterfacePrefix(final String interfacePrefix) { this.interfacePrefix = interfacePrefix; } + public void setEnumNameSuffix(final String enumNameSuffix) { + this.enumNameSuffix = enumNameSuffix; + } + + public void setEnumValueNameSuffix(final String enumValueNameSuffix) { + this.enumValueNameSuffix = enumValueNameSuffix; + } + public boolean isSupportNullable() { return supportNullable; } @@ -1040,7 +1058,7 @@ public String toEnumVarName(String name, String datatype) { enumName = enumName.replaceFirst("^_", ""); enumName = enumName.replaceFirst("_$", ""); - enumName = camelize(enumName) + "Enum"; + enumName = camelize(enumName) + this.enumValueNameSuffix; if (enumName.matches("\\d.*")) { // starts with number return "_" + enumName; @@ -1051,7 +1069,7 @@ public String toEnumVarName(String name, String datatype) { @Override public String toEnumName(CodegenProperty property) { - return sanitizeName(camelize(property.name)) + "Enum"; + return sanitizeName(camelize(property.name)) + this.enumNameSuffix; } public String testPackageName() { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java index 8126b4dbb74e..91ea06e1a8e9 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AspNetCoreServerCodegen.java @@ -206,11 +206,18 @@ public AspNetCoreServerCodegen() { "Version for Microsoft.AspNetCore.Mvc.NewtonsoftJson for ASP.NET Core 3.0+", newtonsoftVersion); - addSwitch(USE_DEFAULT_ROUTING, "Use default routing for the ASP.NET Core version. For 3.0 turn off default because it is not yet supported.", useDefaultRouting); + addOption(CodegenConstants.ENUM_NAME_SUFFIX, + CodegenConstants.ENUM_NAME_SUFFIX_DESC, + enumNameSuffix); + + addOption(CodegenConstants.ENUM_VALUE_NAME_SUFFIX, + CodegenConstants.ENUM_VALUE_NAME_SUFFIX_DESC, + enumValueNameSuffix); + classModifier.addEnum("", "Keep class default with no modifier"); classModifier.addEnum("abstract", "Make class abstract"); classModifier.setDefault(""); @@ -348,7 +355,6 @@ public void processOpts() { supportingFiles.add(new SupportingFile("Project.nuspec.mustache", packageFolder, packageName + ".nuspec")); } - if (useSwashbuckle) { supportingFiles.add(new SupportingFile("Filters" + File.separator + "BasePathFilter.mustache", packageFolder + File.separator + "Filters", "BasePathFilter.cs")); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpModelEnumTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpModelEnumTest.java index 081368d0f7bf..675b1d1bc56c 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpModelEnumTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/csharp/CsharpModelEnumTest.java @@ -16,15 +16,21 @@ */ package org.openapitools.codegen.csharp; - +import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; +import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenProperty; import org.openapitools.codegen.DefaultCodegen; +import org.openapitools.codegen.TestUtils; +import org.openapitools.codegen.languages.AspNetCoreServerCodegen; import org.openapitools.codegen.languages.CSharpClientCodegen; +import org.testng.Assert; import org.testng.annotations.Test; import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; public class CsharpModelEnumTest { @@ -86,4 +92,40 @@ public void overrideEnumTest() { Assert.assertTrue(enumVar.isEnum); */ } + + @Test(description = "use default suffixes for enums") + public void useDefaultEnumSuffixes() { + final AspNetCoreServerCodegen codegen = new AspNetCoreServerCodegen(); + + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"); + codegen.setOpenAPI(openAPI); + + final Schema petSchema = openAPI.getComponents().getSchemas().get("Pet"); + final CodegenModel cm = codegen.fromModel("Pet", petSchema); + final CodegenProperty statusProperty = cm.vars.get(5); + Assert.assertEquals(statusProperty.name, "Status"); + Assert.assertTrue(statusProperty.isEnum); + Assert.assertEquals(statusProperty.datatypeWithEnum, "StatusEnum"); + + Assert.assertEquals(codegen.toEnumVarName("Aaaa", ""), "AaaaEnum"); + } + + @Test(description = "use custom suffixes for enums") + public void useCustomEnumSuffixes() { + final AspNetCoreServerCodegen codegen = new AspNetCoreServerCodegen(); + codegen.setEnumNameSuffix("EnumName"); + codegen.setEnumValueNameSuffix("EnumValue"); + + OpenAPI openAPI = TestUtils.parseSpec("src/test/resources/3_0/petstore.yaml"); + codegen.setOpenAPI(openAPI); + + final Schema petSchema = openAPI.getComponents().getSchemas().get("Pet"); + final CodegenModel cm = codegen.fromModel("Pet", petSchema); + final CodegenProperty statusProperty = cm.vars.get(5); + Assert.assertEquals(statusProperty.name, "Status"); + Assert.assertTrue(statusProperty.isEnum); + Assert.assertEquals(statusProperty.datatypeWithEnum, "StatusEnumName"); + + Assert.assertEquals(codegen.toEnumVarName("Aaaa", ""), "AaaaEnumValue"); + } }