Private/Document/ConvertFrom-OpenApiSwagger2Parameter.ps1
|
function ConvertFrom-OpenApiSwagger2Parameter { <# .SYNOPSIS Converts a Swagger 2.0 non-body parameter (path/query/header) to an OpenAPI 3 parameter. .DESCRIPTION type/format/items/enum/default/validation keywords move into 'schema'. For arrays, collectionFormat maps to style/explode: csv -> form (simple for path/header) explode false, ssv -> spaceDelimited, pipes -> pipeDelimited, multi -> form explode true; tsv has no OpenAPI 3 equivalent and is treated as csv. #> [CmdletBinding()] [OutputType([System.Collections.Specialized.OrderedDictionary])] param( [Parameter(Mandatory)] [System.Collections.IDictionary]$Node ) $parameter = [System.Collections.Specialized.OrderedDictionary]::new([System.StringComparer]::Ordinal) foreach ($key in @('name', 'in', 'description', 'required', 'allowEmptyValue')) { if ($Node.Contains($key)) { $parameter[$key] = $Node[$key] } } foreach ($key in @($Node.Keys)) { if ($key.StartsWith('x-')) { $parameter[$key] = $Node[$key] } } $parameter['schema'] = ConvertFrom-OpenApiSwagger2SimpleSchema -Node $Node if ([string]$Node['type'] -ceq 'array') { $format = [string]$Node['collectionFormat'] if ([string]::IsNullOrEmpty($format)) { $format = 'csv' } $in = [string]$Node['in'] $simpleLocation = $in -eq 'path' -or $in -eq 'header' switch ($format) { 'multi' { $parameter['style'] = 'form' $parameter['explode'] = $true } 'ssv' { $parameter['style'] = 'spaceDelimited' $parameter['explode'] = $false } 'pipes' { $parameter['style'] = 'pipeDelimited' $parameter['explode'] = $false } default { if ($simpleLocation) { $parameter['style'] = 'simple' } else { $parameter['style'] = 'form' } $parameter['explode'] = $false } } } return $parameter } |