def convert object, types, convert_fn
      case object
      when Array then
        object.map { |e| convert e, types, convert_fn }
      when Hash then
        Hash[object.map do |k, v|
          [k, v.is_a?(Hash) || v.is_a?(Array) ? convert(v, types, convert_fn) : convert_fn[types[k]].call(v)]
        end]
      else
        object
      end
    end
def convert object, types, convert_fn
      case object
      when Array then
        object.map { |e| convert e, types, convert_fn }
      when Hash then
        Hash[object.map do |k, v|
          [k, v.is_a?(Hash) || v.is_a?(Array) ? convert(v, types, convert_fn) : convert_fn[types[k]].call(v)]
        end]
      else
        object
      end
    end
Hace una conversión recursiva de tipo de todos los values según los tipos de las keys indicados en types