private static Consumer createSkipConsumer()

in adapter/avro/src/main/java/org/apache/arrow/adapter/avro/AvroToArrowUtils.java [425:510]


  private static Consumer createSkipConsumer(Schema schema) {

    SkipFunction skipFunction;
    Schema.Type type = schema.getType();

    switch (type) {
      case UNION:
        List<Consumer> unionDelegates =
            schema.getTypes().stream().map(s -> createSkipConsumer(s)).collect(Collectors.toList());
        skipFunction = decoder -> unionDelegates.get(decoder.readInt()).consume(decoder);

        break;
      case ARRAY:
        Consumer elementDelegate = createSkipConsumer(schema.getElementType());
        skipFunction =
            decoder -> {
              for (long i = decoder.skipArray(); i != 0; i = decoder.skipArray()) {
                for (long j = 0; j < i; j++) {
                  elementDelegate.consume(decoder);
                }
              }
            };
        break;
      case MAP:
        Consumer valueDelegate = createSkipConsumer(schema.getValueType());
        skipFunction =
            decoder -> {
              for (long i = decoder.skipMap(); i != 0; i = decoder.skipMap()) {
                for (long j = 0; j < i; j++) {
                  decoder.skipString(); // Discard key
                  valueDelegate.consume(decoder);
                }
              }
            };
        break;
      case RECORD:
        List<Consumer> delegates =
            schema.getFields().stream()
                .map(field -> createSkipConsumer(field.schema()))
                .collect(Collectors.toList());

        skipFunction =
            decoder -> {
              for (Consumer consumer : delegates) {
                consumer.consume(decoder);
              }
            };

        break;
      case ENUM:
        skipFunction = decoder -> decoder.readEnum();
        break;
      case STRING:
        skipFunction = decoder -> decoder.skipString();
        break;
      case FIXED:
        skipFunction = decoder -> decoder.skipFixed(schema.getFixedSize());
        break;
      case INT:
        skipFunction = decoder -> decoder.readInt();
        break;
      case BOOLEAN:
        skipFunction = decoder -> decoder.skipFixed(1);
        break;
      case LONG:
        skipFunction = decoder -> decoder.readLong();
        break;
      case FLOAT:
        skipFunction = decoder -> decoder.readFloat();
        break;
      case DOUBLE:
        skipFunction = decoder -> decoder.readDouble();
        break;
      case BYTES:
        skipFunction = decoder -> decoder.skipBytes();
        break;
      case NULL:
        skipFunction = decoder -> {};
        break;
      default:
        // no-op, shouldn't get here
        throw new UnsupportedOperationException("Invalid avro type: " + type.getName());
    }

    return new SkipConsumer(skipFunction);
  }