in elitzur-avro/src/main/scala/com/spotify/elitzur/converters/avro/dynamic/dsl/AvroAccessorLogics.scala [75:91]
private def getArrayAccessor(innerSchema: Schema, fieldTokens: AvroFieldTokens): BaseAccessor = {
if (fieldTokens.rest.isDefined) {
val recursiveResult = AvroObjMapper.getAvroAccessors(fieldTokens.rest.get, innerSchema)
// innerOps represents the list of accessors to be applied to each element in an array
val innerOps = recursiveResult.map(_.ops)
// flattenFlag is true if one of the internal operation types is a map based operation
val flattenFlag = getFlattenFlag(recursiveResult.map(_.ops))
if (flattenFlag) {
ArrayFlatmapAccessor(fieldTokens.field, innerOps)
} else {
ArrayMapAccessor(fieldTokens.field, innerOps)
}
} else {
val headAccessor: BaseAccessor = mapToAccessors(innerSchema, fieldTokens).ops
ArrayNoopAccessor(fieldTokens.field, List(headAccessor))
}
}