Method: Puppet::Pops::Types::TypeCalculator#infer_set_Hash

Defined in:
lib/puppet/pops/types/type_calculator.rb

#infer_set_Hash(o) ⇒ Object



727
728
729
730
731
732
733
734
735
736
737
# File 'lib/puppet/pops/types/type_calculator.rb', line 727

def infer_set_Hash(o)
  if o.empty?
    PHashType::EMPTY
  elsif o.keys.all? { |k| PStringType::NON_EMPTY.instance?(k) }
    PStructType.new(o.each_pair.map { |k, v| PStructElement.new(PStringType.new(k), infer_set(v)) })
  else
    ktype = PVariantType.maybe_create(o.keys.map { |k| infer_set(k) })
    etype = PVariantType.maybe_create(o.values.map { |e| infer_set(e) })
    PHashType.new(unwrap_single_variant(ktype), unwrap_single_variant(etype), size_as_type(o))
  end
end