Skip to content

Commit

Permalink
add additional properties support to powershell client generator (#6528)
Browse files Browse the repository at this point in the history
  • Loading branch information
wing328 authored Jun 4, 2020
1 parent a6bf956 commit 5cf4ee1
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -922,6 +922,10 @@ public Map<String, Object> postProcessModels(Map<String, Object> objs) {
model.anyOf.remove("ModelNull");
}

// add vendor extension for additonalProperties: true
if ("null<String, SystemCollectionsHashtable>".equals(model.parent)) {
model.vendorExtensions.put("x-additional-properties", true);
}
}

return objs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -129,13 +129,24 @@ function ConvertFrom-{{{apiNamePrefix}}}JsonTo{{{classname}}} {
$PSBoundParameters | Out-DebugParameter | Write-Debug
$JsonParameters = ConvertFrom-Json -InputObject $Json
{{#vendorExtensions.x-additional-properties}}
${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties = @{}
{{/vendorExtensions.x-additional-properties}}

# check if Json contains properties not defined in {{{apiNamePrefix}}}{{{classname}}}
$AllProperties = ({{#allVars}}"{{{baseName}}}"{{^-last}}, {{/-last}}{{/allVars}})
foreach ($name in $JsonParameters.PsObject.Properties.Name) {
{{^vendorExtensions.x-additional-properties}}
if (!($AllProperties.Contains($name))) {
throw "Error! JSON key '$name' not found in the properties: $($AllProperties)"
}
{{/vendorExtensions.x-additional-properties}}
{{#vendorExtensions.x-additional-properties}}
# store undefined properties in additionalProperties
if (!($AllProperties.Contains($name))) {
${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties[$name] = $JsonParameters.PSobject.Properties[$name].value
}
{{/vendorExtensions.x-additional-properties}}
}

{{#requiredVars}}
Expand Down Expand Up @@ -166,6 +177,9 @@ function ConvertFrom-{{{apiNamePrefix}}}JsonTo{{{classname}}} {
"<<baseName>>" = ${<<name>>}
<</allVars>>
<<={{ }}=>>
{{#vendorExtensions.x-additional-properties}}
"AdditionalProperties" = ${{{apiNamePrefix}}}{{{classname}}}AdditionalProperties
{{/vendorExtensions.x-additional-properties}}
}

return $PSO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -699,6 +699,7 @@ components:
xml:
name: User
Tag:
additionalProperties: true
title: Pet Tag
description: A tag for a pet
type: object
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,14 @@ function ConvertFrom-PSJsonToTag {
$PSBoundParameters | Out-DebugParameter | Write-Debug

$JsonParameters = ConvertFrom-Json -InputObject $Json
$PSTagAdditionalProperties = @{}

# check if Json contains properties not defined in PSTag
$AllProperties = ("id", "name")
foreach ($name in $JsonParameters.PsObject.Properties.Name) {
# store undefined properties in additionalProperties
if (!($AllProperties.Contains($name))) {
throw "Error! JSON key '$name' not found in the properties: $($AllProperties)"
$PSTagAdditionalProperties[$name] = $JsonParameters.PSobject.Properties[$name].value
}
}

Expand All @@ -101,6 +103,7 @@ function ConvertFrom-PSJsonToTag {
$PSO = [PSCustomObject]@{
"id" = ${Id}
"name" = ${Name}
"AdditionalProperties" = $PSTagAdditionalProperties
}

return $PSO
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Generated by: OpenAPI Generator Team
#
# Generated on: 5/19/20
# Generated on: 6/3/20
#

@{
Expand Down Expand Up @@ -87,7 +87,8 @@ FunctionsToExport = 'Add-PSPet', 'Remove-Pet', 'Find-PSPetsByStatus', 'Find-PSPe
'Set-PSConfiguration', 'Set-PSConfigurationApiKey',
'Set-PSConfigurationApiKeyPrefix',
'Set-PSConfigurationDefaultHeader', 'Get-PSHostSetting',
'Get-PSUrlFromHostSetting'
'Get-PSUrlFromHostSetting', 'Set-PSConfigurationHttpSigning',
'Get-PSConfigurationHttpSigning'

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()
Expand Down

0 comments on commit 5cf4ee1

Please sign in to comment.