private Object serialize(TypeInfo typeInfo, ObjectInspector fieldOI, Object structFieldData, Schema schema) throws AvroSerdeException {
switch(typeInfo.getCategory()) {
case PRIMITIVE:
assert fieldOI instanceof PrimitiveObjectInspector;
return serializePrimitive(typeInfo, (PrimitiveObjectInspector) fieldOI, structFieldData);
case MAP:
assert fieldOI instanceof MapObjectInspector;
assert typeInfo instanceof MapTypeInfo;
return serializeMap((MapTypeInfo) typeInfo, (MapObjectInspector) fieldOI, structFieldData, schema);
case LIST:
assert fieldOI instanceof ListObjectInspector;
assert typeInfo instanceof ListTypeInfo;
return serializeList((ListTypeInfo) typeInfo, (ListObjectInspector) fieldOI, structFieldData, schema);
case UNION:
assert fieldOI instanceof UnionObjectInspector;
assert typeInfo instanceof UnionTypeInfo;
return serializeUnion((UnionTypeInfo) typeInfo, (UnionObjectInspector) fieldOI, structFieldData, schema);
case STRUCT:
assert fieldOI instanceof StructObjectInspector;
assert typeInfo instanceof StructTypeInfo;
return serializeStruct((StructTypeInfo) typeInfo, (StructObjectInspector) fieldOI, structFieldData, schema);
default:
throw new AvroSerdeException("Ran out of TypeInfo Categories: " + typeInfo.getCategory());
}
}