private static GenericRecord castRecord()

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