in avro/src/main/scala/magnolify/avro/AvroType.scala [189:210]
private def aux2[T, Repr](tpe: Schema.Type)(f: Repr => T)(g: T => Repr): AvroField[T] =
aux[T, Repr, Repr](tpe)(f)(g)
private def id[T](tpe: Schema.Type): AvroField[T] = aux[T, T, T](tpe)(identity)(identity)
implicit val afNull: AvroField[Null] = aux2[Null, Null](Schema.Type.NULL)(_ => null)(_ => null)
implicit val afBoolean: AvroField[Boolean] = id[Boolean](Schema.Type.BOOLEAN)
implicit val afInt: AvroField[Int] = id[Int](Schema.Type.INT)
implicit val afLong: AvroField[Long] = id[Long](Schema.Type.LONG)
implicit val afFloat: AvroField[Float] = id[Float](Schema.Type.FLOAT)
implicit val afDouble: AvroField[Double] = id[Double](Schema.Type.DOUBLE)
implicit val afByteBuffer: AvroField[ByteBuffer] = new Aux[ByteBuffer, ByteBuffer, ByteBuffer] {
override protected def buildSchema(cm: CaseMapper): Schema = Schema.create(Schema.Type.BYTES)
// `JacksonUtils.toJson` expects `Array[Byte]` for `BYTES` defaults
override def makeDefault(d: ByteBuffer)(cm: CaseMapper): Array[Byte] = d.array()
// copy to avoid issue in case original buffer is reused
override def from(v: ByteBuffer)(cm: CaseMapper): ByteBuffer = {
val ptr = v.asReadOnlyBuffer()
ByteBuffer.allocate(ptr.remaining()).put(ptr)
}
override def to(v: ByteBuffer)(cm: CaseMapper): ByteBuffer = v
}