protected Converter newScalarConverter()

in parquet-protobuf/src/main/java/org/apache/parquet/proto/ProtoMessageConverter.java [294:358]


  protected Converter newScalarConverter(
      ParentValueContainer pvc,
      Message.Builder parentBuilder,
      Descriptors.FieldDescriptor fieldDescriptor,
      Type parquetType) {

    JavaType javaType = fieldDescriptor.getJavaType();

    switch (javaType) {
      case STRING:
        return new ProtoStringConverter(pvc);
      case FLOAT:
        return new ProtoFloatConverter(pvc);
      case DOUBLE:
        return new ProtoDoubleConverter(pvc);
      case BOOLEAN:
        return new ProtoBooleanConverter(pvc);
      case BYTE_STRING:
        return new ProtoBinaryConverter(pvc);
      case ENUM:
        return new ProtoEnumConverter(pvc, fieldDescriptor);
      case INT:
        return new ProtoIntConverter(pvc);
      case LONG:
        return new ProtoLongConverter(pvc);
      case MESSAGE: {
        if (parquetType.isPrimitive()) {
          // if source is a Primitive type yet target is MESSAGE, it's probably a wrapped message
          Descriptor messageType = fieldDescriptor.getMessageType();
          if (messageType.equals(DoubleValue.getDescriptor())) {
            return new ProtoDoubleValueConverter(pvc);
          }
          if (messageType.equals(FloatValue.getDescriptor())) {
            return new ProtoFloatValueConverter(pvc);
          }
          if (messageType.equals(Int64Value.getDescriptor())) {
            return new ProtoInt64ValueConverter(pvc);
          }
          if (messageType.equals(UInt64Value.getDescriptor())) {
            return new ProtoUInt64ValueConverter(pvc);
          }
          if (messageType.equals(Int32Value.getDescriptor())) {
            return new ProtoInt32ValueConverter(pvc);
          }
          if (messageType.equals(UInt32Value.getDescriptor())) {
            return new ProtoUInt32ValueConverter(pvc);
          }
          if (messageType.equals(BoolValue.getDescriptor())) {
            return new ProtoBoolValueConverter(pvc);
          }
          if (messageType.equals(StringValue.getDescriptor())) {
            return new ProtoStringValueConverter(pvc);
          }
          if (messageType.equals(BytesValue.getDescriptor())) {
            return new ProtoBytesValueConverter(pvc);
          }
        }
        Message.Builder subBuilder = parentBuilder.newBuilderForField(fieldDescriptor);
        return new ProtoMessageConverter(conf, pvc, subBuilder, parquetType.asGroupType(), extraMetadata);
      }
    }

    throw new UnsupportedOperationException(
        String.format("Cannot convert type: %s" + " (Parquet type: %s) ", javaType, parquetType));
  }