private/ConvertTo-GlyMatcherLabel.ps1

function ConvertTo-GlyMatcherLabel {
  param(
    [GlySelector] $Selector
  )

  if ($null -eq $Selector) {
    return 'Default'
  }

  $signature = ConvertTo-GlySelectorSignature -Selector $Selector
  if ($null -eq $script:GlyBuiltInMatcherLabels) {
    $script:GlyBuiltInMatcherLabels = @{}
    foreach ($definition in Get-GlyBuiltInSelectorCatalog) {
      $definitionSignature = ConvertTo-GlySelectorSignature -Selector $definition.Selector
      $script:GlyBuiltInMatcherLabels[$definitionSignature] = $definition.Token
    }
  }
  if ($script:GlyBuiltInMatcherLabels.ContainsKey($signature)) {
    return $script:GlyBuiltInMatcherLabels[$signature]
  }

  $parts = @()
  if ($null -ne $Selector.Kind) { $parts += "Kind=$($Selector.Kind)" }
  if (-not [string]::IsNullOrWhiteSpace($Selector.Name)) { $parts += "Name=$($Selector.Name)" }
  if ($Selector.Extension.Count -gt 0) { $parts += "Extension=$($Selector.Extension -join ',')" }
  if ($Selector.Glob.Count -gt 0) { $parts += "Glob=$($Selector.Glob -join ',')" }
  if ($Selector.Attributes.Count -gt 0) { $parts += "Attributes=$($Selector.Attributes -join ',')" }
  return $parts -join '; '
}