Private/ObjectTagFormat.ps1

# Helpers for parsing and formatting object tags on verification rows.
# Format: {1:cs01,2:proj-a} — dimension:object pairs separated by comma
# inside braces.

function Format-ObjectTag {
    [CmdletBinding()]
    param (
        [hashtable]$Objects
    )

    if (-not $Objects -or $Objects.Count -eq 0) { return '' }

    $parts = foreach ($key in ($Objects.Keys | Sort-Object)) {
        "$key`:$($Objects[$key])"
    }
    '{' + ($parts -join ',') + '}'
}

function ConvertFrom-ObjectTag {
    [CmdletBinding()]
    param (
        [AllowEmptyString()]
        [AllowNull()]
        [string]$Tag
    )

    if (-not $Tag -or $Tag -eq '') { return $null }

    $inner = $Tag.TrimStart('{').TrimEnd('}')
    if (-not $inner) { return $null }

    $result = @{}
    foreach ($pair in ($inner -split ',')) {
        $parts = $pair -split ':', 2
        if ($parts.Count -eq 2) {
            $result[[int]$parts[0]] = $parts[1]
        }
    }

    if ($result.Count -eq 0) { return $null }
    $result
}