Private/ConvertTo-JevEnrichedResult.ps1
|
function ConvertTo-JevEnrichedResult { param( [Parameter(Mandatory)] [object] $State, [Parameter(Mandatory)] [object] $Response ) $result = [ordered]@{} if ($State -is [System.Collections.IDictionary]) { foreach ($key in $State.Keys) { $name = [string] $key if ([string]::IsNullOrWhiteSpace($name)) { continue } $result[$name] = $State[$key] } } elseif ($State -is [string] -or $State -is [ValueType] -or $State -is [Array]) { $result['State'] = $State } else { foreach ($property in $State.PSObject.Properties) { $result[$property.Name] = $property.Value } } foreach ($property in $Response.PSObject.Properties | Where-Object Name -notin @('answers', 'usage')) { $name = $property.Name if ($result.Contains($name)) { $name = "Jev_$name" } $result[$name] = $property.Value } $answersProperty = $Response.PSObject.Properties['answers'] if ($null -ne $answersProperty) { $answerEntries = if ($answersProperty.Value -is [System.Collections.IDictionary]) { @($answersProperty.Value.GetEnumerator() | ForEach-Object { [pscustomobject] @{ Name = [string] $_.Key; Value = $_.Value } }) } else { @($answersProperty.Value.PSObject.Properties | ForEach-Object { [pscustomobject] @{ Name = $_.Name; Value = $_.Value } }) } foreach ($answerEntry in $answerEntries) { $answerValue = $answerEntry.Value $displayValue = $answerValue $answerType = [string] $answerValue.type switch ($answerType.ToLowerInvariant()) { 'noul' { $displayValue = $answerValue.noul } 'choice' { $displayValue = $answerValue.choice } 'score' { $displayValue = $answerValue.score } } $name = $answerEntry.Name while ($result.Contains($name)) { $name = "Jev_$name" } $result[$name] = $displayValue } } $usageProperty = $Response.PSObject.Properties['usage'] if ($null -ne $usageProperty) { $name = 'usage' while ($result.Contains($name)) { $name = "Jev_$name" } $result[$name] = $usageProperty.Value } if ($null -ne $answersProperty) { $name = 'answers' while ($result.Contains($name)) { $name = "Jev_$name" } $result[$name] = $answersProperty.Value } [pscustomobject] $result } |