[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
@ -1545,4 +1546,30 @@ public class PowerShellClientCodegen extends DefaultCodegen implements CodegenCo
@Override
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}}
{{#models}}
{{#model}}
{{#isEnum}}
{{>model_enum}}
{{/isEnum}}
{{^isEnum}}
{{#oneOf}}{{#-first}}{{>model_oneof}}{{/-first}}{{/oneOf}}{{^oneOf}}{{#anyOf}}{{#-first}}{{>model_anyof}}{{/-first}}{{/anyOf}}{{^anyOf}}{{>model_simple}}{{/anyOf}}{{/oneOf}}
{{/isEnum}}
{{/model}}
{{/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
# - '-efg'
# - (xyz)
#Enum_Test:
# type: object
# required:
# - enum_string_required
# properties:
# enum_string:
# type: string
# enum:
# - UPPER
# - lower
# - ''
# enum_string_required:
# type: string
# enum:
# - UPPER
# - lower
# - ''
# enum_integer:
# type: integer
# format: int32
# enum:
# - 1
# - -1
# enum_integer_only:
# type: integer
# enum:
# - 2
# - -2
# enum_number:
# type: number
# format: double
# enum:
# - 1.1
# - -1.2
# outerEnum:
# $ref: '#/components/schemas/OuterEnum'
Enum_Test:
type: object
required:
- enum_string_required
properties:
enum_string:
type: string
enum:
- UPPER
- lower
- ''
enum_string_required:
type: string
enum:
- UPPER
- lower
- ''
enum_integer:
type: integer
format: int32
enum:
- 1
- -1
enum_integer_only:
type: integer
enum:
- 2
- -2
enum_number:
type: number
format: double
enum:
- 1.1
- -1.2
outerEnum:
$ref: '#/components/schemas/OuterEnum'
# outerEnumInteger:
# $ref: '#/components/schemas/OuterEnumInteger'
# outerEnumDefaultValue:
@ -1733,13 +1733,13 @@ components:
enum:
- fish
- crab
#OuterEnum:
# nullable: true
# type: string
# enum:
# - placed
# - approved
# - delivered
OuterEnum:
nullable: true
type: string
enum:
- placed
- approved
- delivered
#OuterEnumInteger:
# type: integer
# enum:

View File

@ -26,6 +26,7 @@ docs/Dog.md
docs/DogAllOf.md
docs/Drawing.md
docs/EnumArrays.md
docs/EnumTest.md
docs/EquilateralTriangle.md
docs/File.md
docs/FileSchemaTestClass.md
@ -50,6 +51,7 @@ docs/NumberOnly.md
docs/ObjectWithDeprecatedFields.md
docs/Order.md
docs/OuterComposite.md
docs/OuterEnum.md
docs/PSAnotherFakeApi.md
docs/PSDefaultApi.md
docs/PSFakeApi.md
@ -109,6 +111,7 @@ src/PSPetstore/Model/Dog.ps1
src/PSPetstore/Model/DogAllOf.ps1
src/PSPetstore/Model/Drawing.ps1
src/PSPetstore/Model/EnumArrays.ps1
src/PSPetstore/Model/EnumTest.ps1
src/PSPetstore/Model/EquilateralTriangle.ps1
src/PSPetstore/Model/File.ps1
src/PSPetstore/Model/FileSchemaTestClass.ps1
@ -135,6 +138,7 @@ src/PSPetstore/Model/NumberOnly.ps1
src/PSPetstore/Model/ObjectWithDeprecatedFields.ps1
src/PSPetstore/Model/Order.ps1
src/PSPetstore/Model/OuterComposite.ps1
src/PSPetstore/Model/OuterEnum.ps1
src/PSPetstore/Model/ParentPet.ps1
src/PSPetstore/Model/Pet.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.Drawing](docs/Drawing.md)
- [PSPetstore/Model.EnumArrays](docs/EnumArrays.md)
- [PSPetstore/Model.EnumTest](docs/EnumTest.md)
- [PSPetstore/Model.EquilateralTriangle](docs/EquilateralTriangle.md)
- [PSPetstore/Model.File](docs/File.md)
- [PSPetstore/Model.FileSchemaTestClass](docs/FileSchemaTestClass.md)
@ -148,6 +149,7 @@ Class | Method | HTTP request | Description
- [PSPetstore/Model.ObjectWithDeprecatedFields](docs/ObjectWithDeprecatedFields.md)
- [PSPetstore/Model.Order](docs/Order.md)
- [PSPetstore/Model.OuterComposite](docs/OuterComposite.md)
- [PSPetstore/Model.OuterEnum](docs/OuterEnum.md)
- [PSPetstore/Model.ParentPet](docs/ParentPet.md)
- [PSPetstore/Model.Pet](docs/Pet.md)
- [PSPetstore/Model.PetWithRequiredTags](docs/PetWithRequiredTags.md)

View File

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

View File

@ -26,12 +26,6 @@ No description available.
No description available.
.PARAMETER OuterEnum
No description available.
.PARAMETER OuterEnumInteger
No description available.
.PARAMETER OuterEnumDefaultValue
No description available.
.PARAMETER OuterEnumIntegerDefaultValue
No description available.
.OUTPUTS
EnumTest<PSCustomObject>
@ -62,16 +56,7 @@ function Initialize-PSEnumTest {
${EnumNumber},
[Parameter(Position = 5, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnum},
[Parameter(Position = 6, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumInteger},
[Parameter(Position = 7, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumDefaultValue},
[Parameter(Position = 8, ValueFromPipelineByPropertyName = $true)]
[PSCustomObject]
${OuterEnumIntegerDefaultValue}
${OuterEnum}
)
Process {
@ -90,9 +75,6 @@ function Initialize-PSEnumTest {
"enum_integer_only" = ${EnumIntegerOnly}
"enum_number" = ${EnumNumber}
"outerEnum" = ${OuterEnum}
"outerEnumInteger" = ${OuterEnumInteger}
"outerEnumDefaultValue" = ${OuterEnumDefaultValue}
"outerEnumIntegerDefaultValue" = ${OuterEnumIntegerDefaultValue}
}
@ -130,7 +112,7 @@ function ConvertFrom-PSJsonToEnumTest {
$JsonParameters = ConvertFrom-Json -InputObject $Json
# 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) {
if (!($AllProperties.Contains($name))) {
throw "Error! JSON key '$name' not found in the properties: $($AllProperties)"
@ -177,24 +159,6 @@ function ConvertFrom-PSJsonToEnumTest {
$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]@{
"enum_string" = ${EnumString}
"enum_string_required" = ${EnumStringRequired}
@ -202,9 +166,6 @@ function ConvertFrom-PSJsonToEnumTest {
"enum_integer_only" = ${EnumIntegerOnly}
"enum_number" = ${EnumNumber}
"outerEnum" = ${OuterEnum}
"outerEnumInteger" = ${OuterEnumInteger}
"outerEnumDefaultValue" = ${OuterEnumDefaultValue}
"outerEnumIntegerDefaultValue" = ${OuterEnumIntegerDefaultValue}
}
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 on: 04/06/2022
# Generated on: 04/08/2022
#
@{