private/ConvertTo-GlyTheme.ps1

function ConvertTo-GlyTheme {
  param(
    [Parameter(Mandatory)]
    [object] $Theme
  )

  $result = [GlyTheme]::new()
  $result.Name = [string] (Get-GlyValue -InputObject $Theme -Name 'Name')
  $result.BuiltIn = [bool] (Get-GlyValue -InputObject $Theme -Name 'BuiltIn' -Default $false)
  $result.Default = ConvertTo-GlyStyle -Style (Get-GlyValue -InputObject $Theme -Name 'Default')

  $rules = foreach ($rule in @(Get-GlyValue -InputObject $Theme -Name 'Rules' -Default @())) {
    $typedRule = [GlyThemeRule]::new()
    $typedRule.Selector = ConvertTo-GlySelector -Selector (Get-GlyValue -InputObject $rule -Name 'Selector')
    $typedRule.Style = ConvertTo-GlyStyle -Style (Get-GlyValue -InputObject $rule -Name 'Style')
    $typedRule
  }
  $result.Rules = [GlyThemeRule[]] @($rules)
  return $result
}