Private/ConvertTo-CIEMProvider.ps1

function ConvertTo-CIEMProvider {
    <#
    .SYNOPSIS
        Converts a PSCustomObject to a typed CIEMProvider instance.

    .DESCRIPTION
        Reconstructs a CIEMProvider class instance from a PSCustomObject.
        Handles objects deserialized from PSU cache where class type
        information is lost.

    .PARAMETER InputObject
        The PSCustomObject (or CIEMProvider) to convert.

    .OUTPUTS
        [CIEMProvider]
    #>

    [CmdletBinding()]
    [OutputType('CIEMProvider')]
    param(
        [Parameter(Mandatory, ValueFromPipeline)]
        $InputObject
    )

    process {
        if ($InputObject -is [CIEMProvider]) {
            return $InputObject
        }

        $provider = [CIEMProvider]::new()
        $provider.Name = $InputObject.Name
        $provider.Enabled = [bool]$InputObject.Enabled
        $provider.ResourceFilter = @($InputObject.ResourceFilter)

        if ($InputObject.Endpoints) {
            $provider.Endpoints = $InputObject.Endpoints
        }
        else {
            $provider.Endpoints = [PSCustomObject]@{}
        }

        $provider
    }
}