Private/Runtime/ConvertTo-OpenApiQueryParameter.ps1
|
function ConvertTo-OpenApiQueryParameter { <# .SYNOPSIS Serialises a query parameter with the form, spaceDelimited, pipeDelimited or deepObject style; returns encoded name=value pairs. #> [CmdletBinding()] [OutputType([string[]])] param( [Parameter(Mandatory)] [string]$Name, [Parameter()] [AllowNull()] [object]$Value, [Parameter()] [ValidateSet('form', 'spaceDelimited', 'pipeDelimited', 'deepObject')] [string]$Style = 'form', [Parameter()] [switch]$Explode, [Parameter()] [switch]$AllowReserved ) $shape = Get-OpenApiValueShape -Value $Value $encodedName = ConvertTo-OpenApiUriEncoded -Value $Name $result = New-Object System.Collections.Generic.List[string] if ($Style -eq 'deepObject' -and $shape -eq 'Object') { foreach ($pair in (ConvertTo-OpenApiDeepObjectPair -Prefix $encodedName -Value $Value -AllowReserved:$AllowReserved)) { $result.Add($pair) } return , $result.ToArray() } $items = New-Object System.Collections.Generic.List[string] if ($shape -eq 'Scalar') { $items.Add((ConvertTo-OpenApiUriEncoded -Value (ConvertTo-OpenApiScalarString -Value $Value) -AllowReserved:$AllowReserved)) } elseif ($shape -eq 'Array') { foreach ($item in $Value) { $items.Add((ConvertTo-OpenApiUriEncoded -Value (ConvertTo-OpenApiScalarString -Value $item) -AllowReserved:$AllowReserved)) } } elseif ($shape -eq 'Object') { foreach ($pair in (ConvertTo-OpenApiPropertyList -InputObject $Value)) { $key = ConvertTo-OpenApiUriEncoded -Value $pair.Name -AllowReserved:$AllowReserved $text = ConvertTo-OpenApiUriEncoded -Value (ConvertTo-OpenApiScalarString -Value $pair.Value) -AllowReserved:$AllowReserved if ($Explode) { # Exploded objects become one name=value pair per property $result.Add($key + '=' + $text) } else { $items.Add($key) $items.Add($text) } } if ($Explode) { return , $result.ToArray() } } if ($shape -eq 'Empty') { $result.Add($encodedName + '=') return , $result.ToArray() } if ($shape -eq 'Array' -and $Explode) { foreach ($item in $items) { $result.Add($encodedName + '=' + $item) } return , $result.ToArray() } $delimiter = ',' if ($Style -eq 'spaceDelimited') { $delimiter = '%20' } elseif ($Style -eq 'pipeDelimited') { $delimiter = '|' } $result.Add($encodedName + '=' + ($items -join $delimiter)) return , $result.ToArray() } |