in elitzur-avro/src/main/scala/com/spotify/elitzur/converters/avro/AvroConverter.scala [340:374]
override def toAvroDefault(v: T, defaultGenericContainer: GenericContainer): Any = {
val ps = caseClass.parameters
var i = 0
val builder = new GenericRecordBuilder(
AvroElitzurConversionUtils
.recordToGenericData(defaultGenericContainer.asInstanceOf[GenericRecord]))
while (i < ps.length) {
val p = ps(i)
val deref = p.dereference(v)
val fieldName = if (defaultGenericContainer.getSchema.getField(p.label) == null) {
SharedUtils.camelToSnake(p.label)
} else {
p.label
}
val field = defaultGenericContainer.getSchema.getField(fieldName)
val containerAsRecord = defaultGenericContainer.asInstanceOf[GenericRecord]
val fieldValue = if (AvroElitzurConversionUtils.isAvroRecordType(field.schema())) {
p.typeclass
.toAvroDefault(deref, containerAsRecord.get(fieldName).asInstanceOf[GenericRecord])
} else if (AvroElitzurConversionUtils.isAvroArrayType(field.schema())) {
p.typeclass
.toAvroDefault(deref, containerAsRecord.get(fieldName).asInstanceOf[GenericArray[_]])
} else {
p.typeclass.toAvroDefault(deref, defaultGenericContainer)
}
builder.set(fieldName, fieldValue)
i += 1
}
builder.build()
}