class Plumb::HashMap
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