private static ArrowArrayWriter createFieldWriter()

in java/fury-format/src/main/java/org/apache/fury/format/vectorized/ArrowWriter.java [101:202]


  private static ArrowArrayWriter createFieldWriter(ValueVector vector) {
    DefaultTypeVisitor<ArrowArrayWriter> typeVisitor =
        new DefaultTypeVisitor<ArrowArrayWriter>() {

          @Override
          public ArrowArrayWriter visit(ArrowType.Bool type) {
            return new BooleanWriter((BitVector) vector);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Int type) {
            if (type.getIsSigned()) {
              int byteWidth = type.getBitWidth() / 8;
              switch (byteWidth) {
                case 1:
                  return new ByteWriter((TinyIntVector) vector);
                case 2:
                  return new ShortWriter((SmallIntVector) vector);
                case 4:
                  return new IntWriter((IntVector) vector);
                case 8:
                  return new LongWriter((BigIntVector) vector);
                default:
                  return unsupported(type);
              }
            }
            return unsupported(type);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.FloatingPoint type) {
            switch (type.getPrecision()) {
              case SINGLE:
                return new FloatWriter((Float4Vector) vector);
              case DOUBLE:
                return new DoubleWriter((Float8Vector) vector);
              default:
                return unsupported(type);
            }
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Date type) {
            if (type.getUnit() == DateUnit.DAY) {
              return new DateWriter((DateDayVector) vector);
            }
            return unsupported(type);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Timestamp type) {
            return new TimestampWriter((TimeStampMicroTZVector) vector);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Binary type) {
            return new BinaryWriter((VarBinaryVector) vector);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Decimal type) {
            return new DecimalWriter((DecimalVector) vector);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Utf8 type) {
            return new StringWriter((VarCharVector) vector);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Struct type) {
            StructVector structVector = (StructVector) (vector);
            ArrowArrayWriter[] childWriters =
                IntStream.range(0, structVector.size())
                    .mapToObj(i -> createFieldWriter(structVector.getChildByOrdinal(i)))
                    .toArray(ArrowArrayWriter[]::new);
            return new StructWriter(structVector, childWriters);
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.List type) {
            ListVector listVector = (ListVector) (vector);
            return new ListWriter(listVector, createFieldWriter(listVector.getDataVector()));
          }

          @Override
          public ArrowArrayWriter visit(ArrowType.Map type) {
            MapVector mapVector = (MapVector) (vector);
            StructVector structVector = (StructVector) (mapVector.getDataVector());
            ArrowArrayWriter keyWriter =
                createFieldWriter(structVector.getChild(MapVector.KEY_NAME));
            ArrowArrayWriter valueWriter =
                createFieldWriter(structVector.getChild(MapVector.VALUE_NAME));
            return new MapWriter(mapVector, keyWriter, valueWriter);
          }
        };
    try {
      return vector.getField().getType().accept(typeVisitor);
    } catch (RuntimeException e) {
      throw e;
    }
  }