diff --git a/docs/generators/aspnet-fastendpoints.md b/docs/generators/aspnet-fastendpoints.md index 75a31639bdba..5e7e2f1f65fc 100644 --- a/docs/generators/aspnet-fastendpoints.md +++ b/docs/generators/aspnet-fastendpoints.md @@ -38,6 +38,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useValidators|Enable request validators (https://fast-endpoints.com/docs/validation).| |false| |versioningPrefix|The versioning prefix for the API. Used only if useApiVersioning is true| |v| +## SUPPORTED VENDOR EXTENSIONS + +| Extension name | Description | Applicable for | Default value | +| -------------- | ----------- | -------------- | ------------- | +|x-zero-based-enum|When used on an enum, the index will not be generated and the default numbering will be used, zero-based|MODEL|false + + ## IMPORT MAPPING | Type/Alias | Imports | diff --git a/docs/generators/aspnetcore.md b/docs/generators/aspnetcore.md index 5d0ca08085dc..4c95558e6f03 100644 --- a/docs/generators/aspnetcore.md +++ b/docs/generators/aspnetcore.md @@ -56,6 +56,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useSeparateModelProject|Create a separate project for models| |false| |useSwashbuckle|Uses the Swashbuckle.AspNetCore NuGet package for documentation.| |true| +## SUPPORTED VENDOR EXTENSIONS + +| Extension name | Description | Applicable for | Default value | +| -------------- | ----------- | -------------- | ------------- | +|x-zero-based-enum|When used on an enum, the index will not be generated and the default numbering will be used, zero-based|MODEL|false + + ## IMPORT MAPPING | Type/Alias | Imports | diff --git a/docs/generators/csharp-functions.md b/docs/generators/csharp-functions.md index 8e6a6a98726a..60e793502f20 100644 --- a/docs/generators/csharp-functions.md +++ b/docs/generators/csharp-functions.md @@ -48,6 +48,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |useDateTimeOffset|Use DateTimeOffset to model date-time properties| |false| |useNewtonsoft|Uses the Newtonsoft JSON library.| |true| +## SUPPORTED VENDOR EXTENSIONS + +| Extension name | Description | Applicable for | Default value | +| -------------- | ----------- | -------------- | ------------- | +|x-zero-based-enum|When used on an enum, the index will not be generated and the default numbering will be used, zero-based|MODEL|false + + ## IMPORT MAPPING | Type/Alias | Imports | diff --git a/docs/generators/csharp.md b/docs/generators/csharp.md index a478f11a0afc..e42095155728 100644 --- a/docs/generators/csharp.md +++ b/docs/generators/csharp.md @@ -57,6 +57,13 @@ These options may be applied as additional-properties (cli) or configOptions (pl |validatable|Generates self-validatable models.| |true| |zeroBasedEnums|Enumerations with string values will start from 0 when true, 1 when false. If not set, enumerations with string values will start from 0 if the first value is 'unknown', case insensitive.| |null| +## SUPPORTED VENDOR EXTENSIONS + +| Extension name | Description | Applicable for | Default value | +| -------------- | ----------- | -------------- | ------------- | +|x-zero-based-enum|When used on an enum, the index will not be generated and the default numbering will be used, zero-based|MODEL|false + + ## IMPORT MAPPING | Type/Alias | Imports | diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/VendorExtension.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/VendorExtension.java index 64ffe79c9b5f..fe97b12695fb 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/VendorExtension.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/VendorExtension.java @@ -24,6 +24,7 @@ public enum VendorExtension { X_OPERATION_EXTRA_ANNOTATION("x-operation-extra-annotation", ExtensionLevel.OPERATION, "List of custom annotations to be added to operation", null), X_VERSION_PARAM("x-version-param", ExtensionLevel.OPERATION_PARAMETER, "Marker property that tells that this parameter would be used for endpoint versioning. Applicable for headers & query params. true/false", null), X_PATTERN_MESSAGE("x-pattern-message", Arrays.asList(ExtensionLevel.FIELD, ExtensionLevel.OPERATION_PARAMETER), "Add this property whenever you need to customize the invalidation error message for the regex pattern of a variable", null), + X_ZERO_BASED_ENUM("x-zero-based-enum", ExtensionLevel.MODEL, "When used on an enum, the index will not be generated and the default numbering will be used, zero-based", "false"), ; private final String name; 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 84c47521f1d0..b72a65bcff9e 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 @@ -105,7 +105,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen { protected boolean supportNullable = Boolean.FALSE; @Setter protected Boolean zeroBasedEnums = null; - protected static final String zeroBasedEnumVendorExtension = "x-zero-based-enum"; + protected static final String zeroBasedEnumVendorExtension = VendorExtension.X_ZERO_BASED_ENUM.getName(); private final Logger LOGGER = LoggerFactory.getLogger(AbstractCSharpCodegen.class); @@ -2033,6 +2033,13 @@ protected Set getNullableTypes() { throw new RuntimeException("This method should no longer be used."); } + @Override + public List getSupportedVendorExtensions() { + List extensions = super.getSupportedVendorExtensions(); + extensions.add(VendorExtension.X_ZERO_BASED_ENUM); + return extensions; + } + protected Set getValueTypes() { return new HashSet<>(Arrays.asList("decimal", "bool", "int", "uint", "long", "ulong", "float", "double", "DateTime", "DateOnly", "DateTimeOffset", "Guid")); } diff --git a/modules/openapi-generator/src/main/resources/aspnet-fastendpoints/enumClass.mustache b/modules/openapi-generator/src/main/resources/aspnet-fastendpoints/enumClass.mustache index c5d6a235dbef..fc8d52f291ce 100644 --- a/modules/openapi-generator/src/main/resources/aspnet-fastendpoints/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/aspnet-fastendpoints/enumClass.mustache @@ -11,6 +11,6 @@ /// /// Enum {{name}} for {{{value}}} /// - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}}, + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.0/enumClass.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.0/enumClass.mustache index ba23434982af..d2961f8ea21a 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.0/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.0/enumClass.mustache @@ -13,6 +13,6 @@ /// Enum {{name}} for {{{value}}} /// {{#isString}}[EnumMember(Value = "{{{value}}}")]{{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}}, + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/enumClass.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/enumClass.mustache index cd6595452ae4..ff41d2a3118e 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/enumClass.mustache @@ -14,6 +14,6 @@ /// Enum {{name}} for {{{value}}} /// {{#isString}}[EnumMember(Value = "{{{value}}}")]{{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}}, + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/enumClass.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/enumClass.mustache index c673f9c35cb1..4e8e5c576775 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/3.0/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/3.0/enumClass.mustache @@ -14,6 +14,6 @@ /// Enum {{name}} for {{{value}}} /// {{#isString}}[EnumMember(Value = "{{{value}}}")]{{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}}, + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/modules/openapi-generator/src/main/resources/csharp-functions/enumClass.mustache b/modules/openapi-generator/src/main/resources/csharp-functions/enumClass.mustache index cd6595452ae4..ff41d2a3118e 100644 --- a/modules/openapi-generator/src/main/resources/csharp-functions/enumClass.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-functions/enumClass.mustache @@ -14,6 +14,6 @@ /// Enum {{name}} for {{{value}}} /// {{#isString}}[EnumMember(Value = "{{{value}}}")]{{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}}, + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}}, {{/-last}}{{/enumVars}}{{/allowableValues}} } diff --git a/modules/openapi-generator/src/main/resources/csharp-functions/modelEnum.mustache b/modules/openapi-generator/src/main/resources/csharp-functions/modelEnum.mustache index d3709c5bc947..a4d9d2b13b05 100644 --- a/modules/openapi-generator/src/main/resources/csharp-functions/modelEnum.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-functions/modelEnum.mustache @@ -25,7 +25,7 @@ {{#isString}} [EnumMember(Value = "{{{value}}}")] {{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}},{{/-last}} + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}},{{/-last}} {{/enumVars}} {{/allowableValues}} diff --git a/modules/openapi-generator/src/main/resources/csharp-functions/modelInnerEnum.mustache b/modules/openapi-generator/src/main/resources/csharp-functions/modelInnerEnum.mustache index d2a6d1ef1ce2..d848897eadfd 100644 --- a/modules/openapi-generator/src/main/resources/csharp-functions/modelInnerEnum.mustache +++ b/modules/openapi-generator/src/main/resources/csharp-functions/modelInnerEnum.mustache @@ -20,7 +20,7 @@ {{#isString}} [EnumMember(Value = "{{{value}}}")] {{/isString}} - {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}} = {{-index}}{{/isString}}{{^-last}},{{/-last}} + {{name}}{{^isString}} = {{{value}}}{{/isString}}{{#isString}}{{^vendorExtensions.x-zero-based-enum}} = {{-index}}{{/vendorExtensions.x-zero-based-enum}}{{/isString}}{{^-last}},{{/-last}} {{/enumVars}} {{/allowableValues}}