class Plumb::HashMap
def _inspect = "HashMap[#{@key_type.inspect}, #{@value_type.inspect}]"
def _inspect = "HashMap[#{@key_type.inspect}, #{@value_type.inspect}]"
def call(result)
def call(result) return result.invalid(errors: 'must be a Hash') unless result.value.is_a?(::Hash) errors = {} parsed = result.value.each.with_object({}) do |(key, value), memo| key_r = @key_type.resolve(key) value_r = @value_type.resolve(value) errs = [] errs << "key #{key_r.errors}" unless key_r.valid? errs << "value #{value_r.value.inspect} #{value_r.errors}" unless value_r.valid? errors[key] = errs unless errs.empty? memo[key_r.value] = value_r.value end errors.empty? ? result.valid(parsed) : result.invalid(errors:) end
def filtered
def filtered FilteredHashMap.new(@key_type, @value_type) end
def initialize(key_type, value_type)
def initialize(key_type, value_type) @key_type = key_type @value_type = value_type @children = [key_type, value_type].freeze freeze end