private Schema makeType()

in src/main/java/com/google/cloud/solutions/autotokenize/common/DeIdentifiedRecordSchemaConverter.java [226:277]


  private Schema makeType(Schema fieldSchema, String fieldSchemaKey, boolean encryptedField) {
    switch (fieldSchema.getType()) {
      case ARRAY:
        SchemaBuilder.TypeBuilder<Schema> arrayTypeBuilder = SchemaBuilder.array().items();
        Schema updatedType = makeType(fieldSchema.getElementType(), fieldSchemaKey, encryptedField);
        return arrayTypeBuilder.type(updatedType);

      case UNION:
        BaseTypeBuilder<UnionAccumulator<Schema>> unionBuilder = SchemaBuilder.unionOf();

        List<Schema> unionTypes = fieldSchema.getTypes();

        if (unionTypes.size() > 2 || !unionTypes.get(0).getType().equals(Type.NULL)) {
          throw new UnsupportedOperationException(
              "Union can contain max of two types. with first being null");
        }

        int unionListLastIndex = unionTypes.size() - 1;
        UnionAccumulator<Schema> unionAccumulator = null;

        for (var typeIndex = 0; typeIndex <= unionListLastIndex; typeIndex++) {
          unionAccumulator =
              makeUnionType(
                  unionBuilder, unionTypes.get(typeIndex), fieldSchemaKey, encryptedField);

          if (typeIndex < unionListLastIndex) {
            unionBuilder = unionAccumulator.and();
          }
        }

        return checkNotNull(unionAccumulator).endUnion();

      case RECORD:
        return makeRecord(recordBuilder(fieldSchema), fieldSchema, fieldSchemaKey);

      case ENUM:
      case FIXED:
      case STRING:
      case BYTES:
      case INT:
      case LONG:
      case FLOAT:
      case DOUBLE:
      case BOOLEAN:
        return (encryptedField) ? Schema.create(Type.STRING) : fieldSchema;
      default:
      case NULL:
      case MAP:
        throw new UnsupportedOperationException(
            "Type not supported in Schema - " + fieldSchema.getType());
    }
  }