[PowerShell] better enum model support (#12082)

* better enum model/class support in powershell client generator

* add new files
This commit is contained in:
William Cheng 2022-04-08 13:27:03 +08:00 committed by GitHub
parent f852c9c695
commit 6591d4e6fb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 130 additions and 93 deletions

View File

@ -1125,7 +1125,8 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
} }
} }
return objs; // process enum in models
return postProcessModelsEnum(objs);
} }
@Override @Override
@ -1545,4 +1546,30 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
@Override @Override
public GeneratorLanguage generatorLanguage() { return GeneratorLanguage.POWERSHELL; } public GeneratorLanguage generatorLanguage() { return GeneratorLanguage.POWERSHELL; }
@Override
public String toEnumVarName(String name, String datatype) {
if (name.length() == 0) {
return "EMPTY";
}
// for symbol, e.g. $, #
if (getSymbolName(name) != null) {
return (getSymbolName(name)).toUpperCase(Locale.ROOT);
}
// number
if ("Int16".equals(datatype) || "Int32".equals(datatype) || "Int64".equals(datatype) ||
"UInt16".equals(datatype) || "UInt32".equals(datatype) || "UInt64".equals(datatype) ||
"Double".equals(datatype) || "Single".equals(datatype) || "Decimal".equals(datatype)) {
String varName = name;
varName = varName.replaceAll("-", "MINUS_");
varName = varName.replaceAll("\\+", "PLUS_");
varName = varName.replaceAll("\\.", "_DOT_");
return varName;
}
// remove special character
return sanitizeName(name);
}
} }

View File

@ -1,6 +1,11 @@
{{> partial_header}} {{> partial_header}}
{{#models}} {{#models}}
{{#model}} {{#model}}
{{#isEnum}}
{{>model_enum}}
{{/isEnum}}
{{^isEnum}}
{{#oneOf}}{{#-first}}{{>model_oneof}}{{/-first}}{{/oneOf}}{{^oneOf}}{{#anyOf}}{{#-first}}{{>model_anyof}}{{/-first}}{{/anyOf}}{{^anyOf}}{{>model_simple}}{{/anyOf}}{{/oneOf}} {{#oneOf}}{{#-first}}{{>model_oneof}}{{/-first}}{{/oneOf}}{{^oneOf}}{{#anyOf}}{{#-first}}{{>model_anyof}}{{/-first}}{{/anyOf}}{{^anyOf}}{{>model_simple}}{{/anyOf}}{{/oneOf}}
{{/isEnum}}
{{/model}} {{/model}}
{{/models}} {{/models}}

View File

@ -0,0 +1,18 @@
<#
.SYNOPSIS
{{{summary}}}{{^summary}}Enum {{{classname}}}.{{/summary}}
.DESCRIPTION
{{{description}}}{{^description}}No description available.{{/description}}
#>
enum {{{classname}}} {
{{#allowableValues}}
{{#enumVars}}
# enum value: {{{value}}}
{{{name}}}
{{/enumVars}}
{{/allowableValues}}
}

View File

@ -1525,42 +1525,42 @@ components:
# - _abc # - _abc
# - '-efg' # - '-efg'
# - (xyz) # - (xyz)
#Enum_Test: Enum_Test:
# type: object type: object
# required: required:
# - enum_string_required - enum_string_required
# properties: properties:
# enum_string: enum_string:
# type: string type: string
# enum: enum:
# - UPPER - UPPER
# - lower - lower
# - '' - ''
# enum_string_required: enum_string_required:
# type: string type: string
# enum: enum:
# - UPPER - UPPER
# - lower - lower
# - '' - ''
# enum_integer: enum_integer:
# type: integer type: integer
# format: int32 format: int32
# enum: enum:
# - 1 - 1
# - -1 - -1
# enum_integer_only: enum_integer_only:
# type: integer type: integer
# enum: enum:
# - 2 - 2
# - -2 - -2
# enum_number: enum_number:
# type: number type: number
# format: double format: double
# enum: enum:
# - 1.1 - 1.1
# - -1.2 - -1.2
# outerEnum: outerEnum:
# $ref: '#/components/schemas/OuterEnum' $ref: '#/components/schemas/OuterEnum'
# outerEnumInteger: # outerEnumInteger:
# $ref: '#/components/schemas/OuterEnumInteger' # $ref: '#/components/schemas/OuterEnumInteger'
# outerEnumDefaultValue: # outerEnumDefaultValue:
@ -1733,13 +1733,13 @@ components:
enum: enum:
- fish - fish
- crab - crab
#OuterEnum: OuterEnum:
# nullable: true nullable: true
# type: string type: string
# enum: enum:
# - placed - placed
# - approved - approved
# - delivered - delivered
#OuterEnumInteger: #OuterEnumInteger:
# type: integer # type: integer
# enum: # enum:

View File

@ -26,6 +26,7 @@ docs/Dog.md
docs/DogAllOf.md docs/DogAllOf.md
docs/Drawing.md docs/Drawing.md
docs/EnumArrays.md docs/EnumArrays.md
docs/EnumTest.md
docs/EquilateralTriangle.md docs/EquilateralTriangle.md
docs/File.md docs/File.md
docs/FileSchemaTestClass.md docs/FileSchemaTestClass.md
@ -50,6 +51,7 @@ docs/NumberOnly.md
docs/ObjectWithDeprecatedFields.md docs/ObjectWithDeprecatedFields.md
docs/Order.md docs/Order.md
docs/OuterComposite.md docs/OuterComposite.md
docs/OuterEnum.md
docs/PSAnotherFakeApi.md docs/PSAnotherFakeApi.md
docs/PSDefaultApi.md docs/PSDefaultApi.md
docs/PSFakeApi.md docs/PSFakeApi.md
@ -109,6 +111,7 @@ src/PSPetstore/Model/Dog.ps1
src/PSPetstore/Model/DogAllOf.ps1 src/PSPetstore/Model/DogAllOf.ps1
src/PSPetstore/Model/Drawing.ps1 src/PSPetstore/Model/Drawing.ps1
src/PSPetstore/Model/EnumArrays.ps1 src/PSPetstore/Model/EnumArrays.ps1
src/PSPetstore/Model/EnumTest.ps1
src/PSPetstore/Model/EquilateralTriangle.ps1 src/PSPetstore/Model/EquilateralTriangle.ps1
src/PSPetstore/Model/File.ps1 src/PSPetstore/Model/File.ps1
src/PSPetstore/Model/FileSchemaTestClass.ps1 src/PSPetstore/Model/FileSchemaTestClass.ps1
@ -135,6 +138,7 @@ src/PSPetstore/Model/NumberOnly.ps1
src/PSPetstore/Model/ObjectWithDeprecatedFields.ps1 src/PSPetstore/Model/ObjectWithDeprecatedFields.ps1
src/PSPetstore/Model/Order.ps1 src/PSPetstore/Model/Order.ps1
src/PSPetstore/Model/OuterComposite.ps1 src/PSPetstore/Model/OuterComposite.ps1
src/PSPetstore/Model/OuterEnum.ps1
src/PSPetstore/Model/ParentPet.ps1 src/PSPetstore/Model/ParentPet.ps1
src/PSPetstore/Model/Pet.ps1 src/PSPetstore/Model/Pet.ps1
src/PSPetstore/Model/PetWithRequiredTags.ps1 src/PSPetstore/Model/PetWithRequiredTags.ps1

View File

@ -122,6 +122,7 @@ Class | Method | HTTP request | Description
- [PSPetstore/Model.DogAllOf](docs/DogAllOf.md) - [PSPetstore/Model.DogAllOf](docs/DogAllOf.md)
- [PSPetstore/Model.Drawing](docs/Drawing.md) - [PSPetstore/Model.Drawing](docs/Drawing.md)
- [PSPetstore/Model.EnumArrays](docs/EnumArrays.md) - [PSPetstore/Model.EnumArrays](docs/EnumArrays.md)
- [PSPetstore/Model.EnumTest](docs/EnumTest.md)
- [PSPetstore/Model.EquilateralTriangle](docs/EquilateralTriangle.md) - [PSPetstore/Model.EquilateralTriangle](docs/EquilateralTriangle.md)
- [PSPetstore/Model.File](docs/File.md) - [PSPetstore/Model.File](docs/File.md)
- [PSPetstore/Model.FileSchemaTestClass](docs/FileSchemaTestClass.md) - [PSPetstore/Model.FileSchemaTestClass](docs/FileSchemaTestClass.md)
@ -148,6 +149,7 @@ Class | Method | HTTP request | Description
- [PSPetstore/Model.ObjectWithDeprecatedFields](docs/ObjectWithDeprecatedFields.md) - [PSPetstore/Model.ObjectWithDeprecatedFields](docs/ObjectWithDeprecatedFields.md)
- [PSPetstore/Model.Order](docs/Order.md) - [PSPetstore/Model.Order](docs/Order.md)
- [PSPetstore/Model.OuterComposite](docs/OuterComposite.md) - [PSPetstore/Model.OuterComposite](docs/OuterComposite.md)
- [PSPetstore/Model.OuterEnum](docs/OuterEnum.md)
- [PSPetstore/Model.ParentPet](docs/ParentPet.md) - [PSPetstore/Model.ParentPet](docs/ParentPet.md)
- [PSPetstore/Model.Pet](docs/Pet.md) - [PSPetstore/Model.Pet](docs/Pet.md)
- [PSPetstore/Model.PetWithRequiredTags](docs/PetWithRequiredTags.md) - [PSPetstore/Model.PetWithRequiredTags](docs/PetWithRequiredTags.md)

View File

@ -9,9 +9,6 @@ Name | Type | Description | Notes
**EnumIntegerOnly** | **Int32** | | [optional] **EnumIntegerOnly** | **Int32** | | [optional]
**EnumNumber** | **Double** | | [optional] **EnumNumber** | **Double** | | [optional]
**OuterEnum** | [**OuterEnum**](OuterEnum.md) | | [optional] **OuterEnum** | [**OuterEnum**](OuterEnum.md) | | [optional]
**OuterEnumInteger** | [**OuterEnumInteger**](OuterEnumInteger.md) | | [optional]
**OuterEnumDefaultValue** | [**OuterEnumDefaultValue**](OuterEnumDefaultValue.md) | | [optional]
**OuterEnumIntegerDefaultValue** | [**OuterEnumIntegerDefaultValue**](OuterEnumIntegerDefaultValue.md) | | [optional]
## Examples ## Examples
@ -22,10 +19,7 @@ $EnumTest = Initialize-PSPetstoreEnumTest -EnumString null `
-EnumInteger null ` -EnumInteger null `
-EnumIntegerOnly null ` -EnumIntegerOnly null `
-EnumNumber null ` -EnumNumber null `
-OuterEnum null ` -OuterEnum null
-OuterEnumInteger null `
-OuterEnumDefaultValue null `
-OuterEnumIntegerDefaultValue null
``` ```
- Convert the resource to JSON - Convert the resource to JSON

View File

@ -26,12 +26,6 @@ No description available.
No description available. No description available.
.PARAMETER OuterEnum .PARAMETER OuterEnum
No description available. No description available.
.PARAMETER OuterEnumInteger
No description available.
.PARAMETER OuterEnumDefaultValue
No description available.
.PARAMETER OuterEnumIntegerDefaultValue
No description available.
.OUTPUTS .OUTPUTS
EnumTest<PSCustomObject> EnumTest<PSCustomObject>
@ -62,16 +56,7 @@ function Initialize-PSEnumTest {
${EnumNumber}, ${EnumNumber},
[Parameter(Position = 5, ValueFromPipelineByPropertyName = $true)] [Parameter(Position = 5, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject] [PSCustomObject]
${OuterEnum}, ${OuterEnum}
[Parameter(Position = 6, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumInteger},
[Parameter(Position = 7, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumDefaultValue},
[Parameter(Position = 8, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumIntegerDefaultValue}
) )
Process { Process {
@ -90,9 +75,6 @@ function Initialize-PSEnumTest {
"enum_integer_only" = ${EnumIntegerOnly} "enum_integer_only" = ${EnumIntegerOnly}
"enum_number" = ${EnumNumber} "enum_number" = ${EnumNumber}
"outerEnum" = ${OuterEnum} "outerEnum" = ${OuterEnum}
"outerEnumInteger" = ${OuterEnumInteger}
"outerEnumDefaultValue" = ${OuterEnumDefaultValue}
"outerEnumIntegerDefaultValue" = ${OuterEnumIntegerDefaultValue}
} }
@ -130,7 +112,7 @@ function ConvertFrom-PSJsonToEnumTest {
$JsonParameters = ConvertFrom-Json -InputObject $Json $JsonParameters = ConvertFrom-Json -InputObject $Json
# check if Json contains properties not defined in PSEnumTest # check if Json contains properties not defined in PSEnumTest
$AllProperties = ("enum_string", "enum_string_required", "enum_integer", "enum_integer_only", "enum_number", "outerEnum", "outerEnumInteger", "outerEnumDefaultValue", "outerEnumIntegerDefaultValue") $AllProperties = ("enum_string", "enum_string_required", "enum_integer", "enum_integer_only", "enum_number", "outerEnum")
foreach ($name in $JsonParameters.PsObject.Properties.Name) { foreach ($name in $JsonParameters.PsObject.Properties.Name) {
if (!($AllProperties.Contains($name))) { if (!($AllProperties.Contains($name))) {
throw "Error! JSON key '$name' not found in the properties: $($AllProperties)" throw "Error! JSON key '$name' not found in the properties: $($AllProperties)"
@ -177,24 +159,6 @@ function ConvertFrom-PSJsonToEnumTest {
$OuterEnum = $JsonParameters.PSobject.Properties["outerEnum"].value $OuterEnum = $JsonParameters.PSobject.Properties["outerEnum"].value
} }
if (!([bool]($JsonParameters.PSobject.Properties.name -match "outerEnumInteger"))) { #optional property not found
$OuterEnumInteger = $null
} else {
$OuterEnumInteger = $JsonParameters.PSobject.Properties["outerEnumInteger"].value
}
if (!([bool]($JsonParameters.PSobject.Properties.name -match "outerEnumDefaultValue"))) { #optional property not found
$OuterEnumDefaultValue = $null
} else {
$OuterEnumDefaultValue = $JsonParameters.PSobject.Properties["outerEnumDefaultValue"].value
}
if (!([bool]($JsonParameters.PSobject.Properties.name -match "outerEnumIntegerDefaultValue"))) { #optional property not found
$OuterEnumIntegerDefaultValue = $null
} else {
$OuterEnumIntegerDefaultValue = $JsonParameters.PSobject.Properties["outerEnumIntegerDefaultValue"].value
}
$PSO = [PSCustomObject]@{ $PSO = [PSCustomObject]@{
"enum_string" = ${EnumString} "enum_string" = ${EnumString}
"enum_string_required" = ${EnumStringRequired} "enum_string_required" = ${EnumStringRequired}
@ -202,9 +166,6 @@ function ConvertFrom-PSJsonToEnumTest {
"enum_integer_only" = ${EnumIntegerOnly} "enum_integer_only" = ${EnumIntegerOnly}
"enum_number" = ${EnumNumber} "enum_number" = ${EnumNumber}
"outerEnum" = ${OuterEnum} "outerEnum" = ${OuterEnum}
"outerEnumInteger" = ${OuterEnumInteger}
"outerEnumDefaultValue" = ${OuterEnumDefaultValue}
"outerEnumIntegerDefaultValue" = ${OuterEnumIntegerDefaultValue}
} }
return $PSO return $PSO

View File

@ -0,0 +1,26 @@
#
# OpenAPI Petstore
# This spec is mainly for testing Petstore server and contains fake endpoints, models. Please do not use this for any other purpose. Special characters: "" \
# Version: 1.0.0
# Generated by OpenAPI Generator: https://openapi-generator.tech
#
<#
.SYNOPSIS
Enum OuterEnum.
.DESCRIPTION
No description available.
#>
enum OuterEnum {
# enum value: "placed"
placed
# enum value: "approved"
approved
# enum value: "delivered"
delivered
}

View File

@ -3,7 +3,7 @@
# #
# Generated by: OpenAPI Generator Team # Generated by: OpenAPI Generator Team
# #
# Generated on: 04/06/2022 # Generated on: 04/08/2022
# #
@{ @{