Fix integer enum in csharp generators (#9035)

* fix integer enum in csharp generators

* add comment
This commit is contained in:
William Cheng
2021-03-25 21:30:42 +08:00
committed by GitHub
parent 6a26ac8e20
commit 402cf9a3a2
32 changed files with 63 additions and 160 deletions

View File

@@ -1,5 +1,7 @@
---
# csharp-netcore test files and image for upload
- filename: "samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools.Test/JSONComposedSchemaTests.cs"
sha256: ec34838fbbb1abb9f762949d510503b6237b607400a85c848c234c39d013a776
- filename: "samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools.Test/Api/PetApiTests.cs"
sha256: dae985015ba461297927d544a78267f2def35e07c3f14ca66468fd61e1fd1c26
- filename: "samples/client/petstore/csharp-netcore/OpenAPIClient/src/Org.OpenAPITools.Test/linux-logo.png"

View File

@@ -500,6 +500,12 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
}
}
/* Comment out the following as model.dataType is always the model name, eg. OuterIntegerEnum,
* and this will fix the integer enum via #9035.
* Only x-enum-byte is used in the template but it won't work due to the bug mentioned above.
* A better solution is to introduce isLong, isInteger, etc in the DefaultCodegen
* so that there is no need for each generator to post-process model enums.
*
// We're looping all models here.
if (model.isEnum) {
// We now need to make allowableValues.enumVars look like the context of CodegenProperty
@@ -543,7 +549,7 @@ public abstract class AbstractCSharpCodegen extends DefaultCodegen implements Co
if (!newEnumVars.isEmpty()) {
model.allowableValues.put("enumVars", newEnumVars);
}
}
} */
} else {
LOGGER.warn("Expected to retrieve model %s by name, but no model was found. Check your -Dmodels inclusions.", openAPIName);
}

View File

@@ -1,20 +0,0 @@
/// <summary>
/// {{^description}}Gets or Sets {{{name}}}{{/description}}{{#description}}{{description}}{{/description}}
/// </summary>
{{#description}}
/// <value>{{description}}</value>
{{/description}}
[JsonConverter(typeof(StringEnumConverter))]
{{>visibility}} enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}
{
{{#allowableValues}}
{{#enumVars}}
/// <summary>
/// Enum {{name}} for {{{value}}}
/// </summary>
[EnumMember(Value = {{#isLong}}"{{/isLong}}{{#isInteger}}"{{/isInteger}}{{#isFloat}}"{{/isFloat}}{{#isDouble}}"{{/isDouble}}{{{value}}}{{#isLong}}"{{/isLong}}{{#isInteger}}"{{/isInteger}}{{#isDouble}}"{{/isDouble}}{{#isFloat}}"{{/isFloat}})]
{{name}}{{#isLong}} = {{{value}}}{{/isLong}}{{#isInteger}} = {{{value}}}{{/isInteger}}{{^isInteger}} = {{-index}}{{/isInteger}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}

View File

@@ -4,9 +4,15 @@
{{#description}}
/// <value>{{description}}</value>
{{/description}}
{{#allowableValues}}{{#enumVars}}{{#-first}}{{#isString}}
{{#allowableValues}}
{{#enumVars}}
{{#-first}}
{{#isString}}
[JsonConverter(typeof(StringEnumConverter))]
{{/isString}}{{/-first}}{{/enumVars}}{{/allowableValues}}
{{/isString}}
{{/-first}}
{{/enumVars}}
{{/allowableValues}}
{{>visibility}} enum {{#datatypeWithEnum}}{{.}}{{/datatypeWithEnum}}{{^datatypeWithEnum}}{{classname}}{{/datatypeWithEnum}}{{#vendorExtensions.x-enum-byte}}: byte{{/vendorExtensions.x-enum-byte}}
{
{{#allowableValues}}

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines EnumClass
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum EnumClass
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnum
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnum
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumDefaultValue
{
/// <summary>

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines EnumClass
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum EnumClass
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnum
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnum
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumDefaultValue
{
/// <summary>

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines EnumClass
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum EnumClass
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnum
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnum
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumDefaultValue
{
/// <summary>

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -162,5 +162,14 @@ namespace Org.OpenAPITools.Test
Assert.Null(f.GetType().GetProperty("unknown_property"));
}
/// <summary>
/// Test OuterEnumInteger
/// </summary>
[Fact]
public void OuterEnumIntegerInstanceTest()
{
OuterEnumInteger instance = OuterEnumInteger.NUMBER_1;
Assert.Equal(1, (int)instance);
}
}
}
}

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines EnumClass
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum EnumClass
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnum
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnum
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumDefaultValue
{
/// <summary>

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines EnumClass
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum EnumClass
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnum
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnum
{
/// <summary>

View File

@@ -29,9 +29,7 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumDefaultValue
{
/// <summary>

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -29,28 +29,22 @@ namespace Org.OpenAPITools.Model
/// <summary>
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -28,27 +28,22 @@ namespace Org.OpenAPITools.Model
/// Defines OuterEnumInteger
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumInteger
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}

View File

@@ -28,27 +28,22 @@ namespace Org.OpenAPITools.Model
/// Defines OuterEnumIntegerDefaultValue
/// </summary>
[JsonConverter(typeof(StringEnumConverter))]
public enum OuterEnumIntegerDefaultValue
{
/// <summary>
/// Enum NUMBER_0 for value: 0
/// </summary>
[EnumMember(Value = "0")]
NUMBER_0 = 1,
NUMBER_0 = 0,
/// <summary>
/// Enum NUMBER_1 for value: 1
/// </summary>
[EnumMember(Value = "1")]
NUMBER_1 = 2,
NUMBER_1 = 1,
/// <summary>
/// Enum NUMBER_2 for value: 2
/// </summary>
[EnumMember(Value = "2")]
NUMBER_2 = 3
NUMBER_2 = 2
}