in src/main/java/com/epam/eco/commons/avro/converter/AvroCaster.java [91:125]
private static GenericRecord castRecord(
GenericRecord record,
Schema recordSchema,
Schema recordCastSchema,
Set<Feature> features) {
Map<String, Field> recordCastFieldMap;
List<Field> recordCastSchemaFields = recordCastSchema.getFields();
if (features.contains(Feature.IGNORE_FIELD_NAMES_CASE)) {
recordCastFieldMap = new CaseInsensitiveMap<>((int) (recordCastSchemaFields.size() / 0.75));
} else {
recordCastFieldMap = new HashMap<>((int) (recordCastSchemaFields.size() / 0.75));
}
for (Field recordCastField : recordCastSchemaFields) {
recordCastFieldMap.put(recordCastField.name(), recordCastField);
}
GenericRecord castedRecord = new GenericData.Record(recordCastSchema);
for (Field recordField : recordSchema.getFields()) {
Field castedRecordField = recordCastFieldMap.get(recordField.name());
if (castedRecordField == null) {
continue;
}
Object fieldValue = record.get(recordField.name());
Object castedFieldValue = castValue(
fieldValue,
recordField.schema(),
castedRecordField.schema(),
features);
if (fieldValue == null || castedFieldValue != null) {
castedRecord.put(castedRecordField.name(), castedFieldValue);
}
}
return castedRecord;
}