class Dry::Types::Map
def coerce(input)
- Api: - private
def coerce(input) assert_primitive(input) do output = {} failures = [] input.each do |k, v| res_k = key_type.try(k) res_v = value_type.try(v) if res_k.failure? failures << res_k.error elsif output.key?(res_k.input) failures << CoercionError.new("duplicate coerced hash key #{res_k.input.inspect}") elsif res_v.failure? failures << res_v.error else output[res_k.input] = res_v.input end end if failures.empty? success(output) else failure(input, MultipleError.new(failures)) end end end