diff --git a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGenerator.kt b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGenerator.kt index 634aff8..a576a47 100644 --- a/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGenerator.kt +++ b/centurion-avro/src/main/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGenerator.kt @@ -23,16 +23,18 @@ class RecordEncoderGenerator { appendLine("/**") appendLine(" * This is a generated [Encoder] that encodes [${kclass.java.simpleName}]s to Avro [GenericRecord]s") appendLine(" */") - appendLine("class ${kclass.java.simpleName}Encoder(schema: Schema) : Encoder<${kclass.java.simpleName}> {") + appendLine("object ${kclass.java.simpleName}Encoder : Encoder<${kclass.java.simpleName}> {") + appendLine() + appendLine(" override fun encode(schema: Schema): (${kclass.java.simpleName}) -> GenericRecord {") + appendLine() + appendLine(" return { value ->") appendLine() kclass.declaredMemberProperties.forEach { property -> - appendLine(" private val ${property.name}Schema = schema.getField(\"${property.name}\").schema()") - appendLine(" private val ${property.name}Pos = schema.getField(\"${property.name}\").pos()") - appendLine(" private val ${property.name}Encode = ${encode(property)}") + appendLine(" val ${property.name}Schema = schema.getField(\"${property.name}\").schema()") + appendLine(" val ${property.name}Pos = schema.getField(\"${property.name}\").pos()") + appendLine(" val ${property.name}Encode = ${encode(property)}") } appendLine() - appendLine(" override fun encode(schema: Schema): (${kclass.java.simpleName}) -> GenericRecord {") - appendLine(" return { value ->") appendLine(" val record = GenericData.Record(schema)") kclass.declaredMemberProperties.forEach { property -> appendLine(" record.put(${property.name}Pos, ${encoderInvocation(property)})") diff --git a/centurion-avro/src/test/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGeneratorTest.kt b/centurion-avro/src/test/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGeneratorTest.kt index 0d8a943..1018506 100644 --- a/centurion-avro/src/test/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGeneratorTest.kt +++ b/centurion-avro/src/test/kotlin/com/sksamuel/centurion/avro/generation/RecordEncoderGeneratorTest.kt @@ -32,41 +32,43 @@ import org.apache.avro.generic.GenericRecord /** * This is a generated [Encoder] that encodes [MyFoo]s to Avro [GenericRecord]s */ -class MyFooEncoder(schema: Schema) : Encoder { - - private val bSchema = schema.getField("b").schema() - private val bPos = schema.getField("b").pos() - private val bEncode = BooleanEncoder.encode(bSchema) - private val cSchema = schema.getField("c").schema() - private val cPos = schema.getField("c").pos() - private val cEncode = LongEncoder.encode(cSchema) - private val dSchema = schema.getField("d").schema() - private val dPos = schema.getField("d").pos() - private val dEncode = DoubleEncoder.encode(dSchema) - private val fSchema = schema.getField("f").schema() - private val fPos = schema.getField("f").pos() - private val fEncode = FloatEncoder.encode(fSchema) - private val iSchema = schema.getField("i").schema() - private val iPos = schema.getField("i").pos() - private val iEncode = IntEncoder.encode(iSchema) - private val listsSchema = schema.getField("lists").schema() - private val listsPos = schema.getField("lists").pos() - private val listsEncode = ListEncoder(IntEncoder).encode(listsSchema) - private val mapsSchema = schema.getField("maps").schema() - private val mapsPos = schema.getField("maps").pos() - private val mapsEncode = MapEncoder(StringEncoder, DoubleEncoder).encode(mapsSchema) - private val sSchema = schema.getField("s").schema() - private val sPos = schema.getField("s").pos() - private val sEncode = NullEncoder(StringEncoder).encode(sSchema) - private val setsSchema = schema.getField("sets").schema() - private val setsPos = schema.getField("sets").pos() - private val setsEncode = SetEncoder(StringEncoder).encode(setsSchema) - private val wineSchema = schema.getField("wine").schema() - private val winePos = schema.getField("wine").pos() - private val wineEncode = NullEncoder(EnumEncoder()).encode(wineSchema) +object MyFooEncoder : Encoder { override fun encode(schema: Schema): (MyFoo) -> GenericRecord { + return { value -> + + val bSchema = schema.getField("b").schema() + val bPos = schema.getField("b").pos() + val bEncode = BooleanEncoder.encode(bSchema) + val cSchema = schema.getField("c").schema() + val cPos = schema.getField("c").pos() + val cEncode = LongEncoder.encode(cSchema) + val dSchema = schema.getField("d").schema() + val dPos = schema.getField("d").pos() + val dEncode = DoubleEncoder.encode(dSchema) + val fSchema = schema.getField("f").schema() + val fPos = schema.getField("f").pos() + val fEncode = FloatEncoder.encode(fSchema) + val iSchema = schema.getField("i").schema() + val iPos = schema.getField("i").pos() + val iEncode = IntEncoder.encode(iSchema) + val listsSchema = schema.getField("lists").schema() + val listsPos = schema.getField("lists").pos() + val listsEncode = ListEncoder(IntEncoder).encode(listsSchema) + val mapsSchema = schema.getField("maps").schema() + val mapsPos = schema.getField("maps").pos() + val mapsEncode = MapEncoder(StringEncoder, DoubleEncoder).encode(mapsSchema) + val sSchema = schema.getField("s").schema() + val sPos = schema.getField("s").pos() + val sEncode = NullEncoder(StringEncoder).encode(sSchema) + val setsSchema = schema.getField("sets").schema() + val setsPos = schema.getField("sets").pos() + val setsEncode = SetEncoder(StringEncoder).encode(setsSchema) + val wineSchema = schema.getField("wine").schema() + val winePos = schema.getField("wine").pos() + val wineEncode = NullEncoder(EnumEncoder()).encode(wineSchema) + val record = GenericData.Record(schema) record.put(bPos, value.b) record.put(cPos, value.c)