in src/main/java/com/google/cloud/solutions/autotokenize/common/DeIdentifiedRecordSchemaConverter.java [284:334]
private UnionAccumulator<Schema> makeUnionType(
BaseTypeBuilder<UnionAccumulator<Schema>> unionBuilder,
Schema type,
String parentSchemaKey,
boolean encryptedField) {
if (!type.getType().equals(Type.NULL)
&& !COMPLEX_TYPES.contains(type.getType())
&& encryptedField) {
return makeTypeProps(unionBuilder.stringBuilder(), type).endString();
}
switch (type.getType()) {
case RECORD:
return makeRecord(
addComplexTypeProperties(unionBuilder.record(type.getName()), type),
type,
parentSchemaKey);
case ENUM:
return (encryptedField)
? makeTypeProps(unionBuilder.stringBuilder(), type).endString()
: addComplexTypeProperties(unionBuilder.enumeration(type.getName()), type)
.defaultSymbol(type.getEnumDefault())
.symbols(type.getEnumSymbols().toArray(new String[0]));
case ARRAY:
return makeArray(unionBuilder.array(), type, parentSchemaKey, encryptedField);
case FIXED:
return (encryptedField)
? makeTypeProps(unionBuilder.stringBuilder(), type).endString()
: addComplexTypeProperties(unionBuilder.fixed(type.getName()), type)
.size(type.getFixedSize());
case STRING:
return makeTypeProps(unionBuilder.stringBuilder(), type).endString();
case BYTES:
return makeTypeProps(unionBuilder.bytesBuilder(), type).endBytes();
case INT:
return makeTypeProps(unionBuilder.intBuilder(), type).endInt();
case LONG:
return makeTypeProps(unionBuilder.longBuilder(), type).endLong();
case FLOAT:
return makeTypeProps(unionBuilder.floatBuilder(), type).endFloat();
case DOUBLE:
return makeTypeProps(unionBuilder.doubleBuilder(), type).endDouble();
case BOOLEAN:
return makeTypeProps(unionBuilder.booleanBuilder(), type).endBoolean();
case NULL:
return unionBuilder.nullType();
default:
throw new UnsupportedOperationException("Union of Union/Map is invalid schema");
}
}