Private/ConvertTo-JsonRpcResponse.ps1
|
function ConvertTo-JsonRpcResponse { [CmdletBinding()] param( [Parameter(ValueFromPipeline)] $InputObject, $ID ) process { if ( -not $InputObject) { $InputObject = @() } $jsonRpcObject = [ordered]@{ jsonrpc = "2.0" id = $ID } # handle result or error if already present if ($InputObject.result) { $jsonRpcObject.result = $InputObject.result } elseif ($InputObject.error) { $jsonRpcObject.error = $InputObject.error } # handle error records and exceptions elseif ($InputObject -is [System.Management.Automation.ErrorRecord] -or $InputObject -is [System.Exception]) { $exception = if ($InputObject -is [System.Management.Automation.ErrorRecord]) { $InputObject.Exception } else { $InputObject } $jsonRpcObject.error = @{ code = -32603 message = $InputObject.ToString() } if ($exception -is [System.NotImplementedException]) { $jsonRpcObject.error.code = -32601 } elseif ($exception -is [System.IO.FileNotFoundException]) { $jsonRpcObject.error.code = -32602 $jsonRpcObject.error.data = @{ uri = $exception.FileName } } elseif ($exception -is [System.ArgumentException]) { # Schema / parameter validation failure -> JSON-RPC Invalid params $jsonRpcObject.error.code = -32602 $jsonRpcObject.error.message = $exception.Message } } # handle everything else as result else { $jsonRpcObject.result = $InputObject } Write-Output $jsonRpcObject } } |