docs: @SuppressWarnings("unchecked")
  	public static DataFormatConverter getConverterForTypeInfo(TypeInformation typeInfo) {
  		DataFormatConverter converter = TYPE_INFO_TO_CONVERTER.get(typeInfo);
  		if (converter != null) {
  			return converter;
  		}
  
  		if (typeInfo instanceof BasicArrayTypeInfo) {
  			BasicArrayTypeInfo arrayType = (BasicArrayTypeInfo) typeInfo;
  			return new ObjectArrayConverter(arrayType.getTypeClass(), arrayType.getComponentInfo());
  		} else if (typeInfo instanceof ObjectArrayTypeInfo) {
  			ObjectArrayTypeInfo arrayType = (ObjectArrayTypeInfo) typeInfo;
  			return new ObjectArrayConverter(arrayType.getTypeClass(), arrayType.getComponentInfo());
  		} else if (typeInfo instanceof MapTypeInfo) {
  			MapTypeInfo mapType = (MapTypeInfo) typeInfo;
  			return new MapConverter(mapType.getKeyTypeInfo(), mapType.getValueTypeInfo());
  		} else if (typeInfo instanceof RowTypeInfo) {
  			return new RowConverter((RowTypeInfo) typeInfo);
  		} else if (typeInfo instanceof PojoTypeInfo) {
  			return new PojoConverter((PojoTypeInfo) typeInfo);
  		} else if (typeInfo instanceof TupleTypeInfo) {
  			return new TupleConverter((TupleTypeInfo) typeInfo);
  		} else if (typeInfo instanceof TupleTypeInfoBase && Product.class.isAssignableFrom(typeInfo.getTypeClass())) {
  			return new CaseClassConverter((TupleTypeInfoBase) typeInfo);
  		} else if (typeInfo instanceof BinaryArrayTypeInfo) {
  			return BinaryArrayConverter.INSTANCE;
  		} else if (typeInfo instanceof BinaryMapTypeInfo) {
  			return BinaryMapConverter.INSTANCE;
  		} else if (typeInfo instanceof BaseRowTypeInfo) {
  			return new BaseRowConverter(typeInfo.getArity());
  		} else if (typeInfo.equals(BasicTypeInfo.BIG_DEC_TYPE_INFO)) {
  			return new BaseRowConverter(typeInfo.getArity());
  		} else if (typeInfo instanceof DecimalTypeInfo) {
  			DecimalTypeInfo decimalType = (DecimalTypeInfo) typeInfo;
  			return new DecimalConverter(decimalType.precision(), decimalType.scale());
  		} else if (typeInfo instanceof BigDecimalTypeInfo) {
  			BigDecimalTypeInfo decimalType = (BigDecimalTypeInfo) typeInfo;
  			return new BigDecimalConverter(decimalType.precision(), decimalType.scale());
  		} else if (typeInfo instanceof BinaryGenericTypeInfo) {
  			return BinaryGenericConverter.INSTANCE;
  		} else {
  			return new GenericConverter(typeInfo.createSerializer(new ExecutionConfig()));
  		}
  	}