Private/CP/Get-CPResponseItems.ps1

function Get-CPResponseItems {
    [CmdletBinding()]
    param(
        $Response,

        [String]$ItemPropertyName
    )

    $result = [PSCustomObject]@{
        Items   = @()
        HasMore = $false
        Next    = $null
    }

    if ($null -eq $Response) {
        return $result
    }

    $payload = $Response
    if ($Response -is [PSCustomObject] -and $null -ne $Response.PSObject.Properties['data'] -and $null -ne $Response.data) {
        $payload = $Response.data
    }

    if ($payload -is [System.Array]) {
        $result.Items = @($payload)
        return $result
    }

    if ($ItemPropertyName -and $null -ne $payload.PSObject.Properties[$ItemPropertyName] -and $null -ne $payload.$ItemPropertyName) {
        $result.Items = @($payload.$ItemPropertyName)
    }
    elseif ($null -ne $payload.PSObject.Properties['id'] -or $null -ne $payload.PSObject.Properties['name']) {
        $result.Items = @($payload)
    }

    if ($null -ne $payload.PSObject.Properties['hasMore'] -and $payload.hasMore) {
        $result.HasMore = [bool]$payload.hasMore
    }

    if ($null -ne $payload.PSObject.Properties['next'] -and -not [string]::IsNullOrWhiteSpace([string]$payload.next)) {
        $result.Next = [string]$payload.next
    }

    return $result
}