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());
}
}