private def aux2[T, Repr]()

in protobuf/src/main/scala/magnolify/protobuf/ProtobufType.scala [213:242]


  private def aux2[T, Repr](_default: T)(f: Repr => T)(g: T => Repr): ProtobufField[T] =
    aux[T, Repr, Repr](_default)(f)(g)

  private def id[T](_default: T): ProtobufField[T] = aux[T, T, T](_default)(identity)(identity)

  implicit val pfBoolean: ProtobufField[Boolean] = id[Boolean](false)
  implicit val pfInt: ProtobufField[Int] = id[Int](0)
  implicit val pfLong: ProtobufField[Long] = id[Long](0L)
  implicit val pfFloat: ProtobufField[Float] = id[Float](0.0f)
  implicit val pfDouble: ProtobufField[Double] = id[Double](0.0)
  implicit val pfString: ProtobufField[String] = id[String]("")
  implicit val pfByteString: ProtobufField[ByteString] = id[ByteString](ByteString.EMPTY)
  implicit val pfByteArray: ProtobufField[Array[Byte]] =
    aux2[Array[Byte], ByteString](Array.emptyByteArray)(b => b.toByteArray)(ByteString.copyFrom)

  implicit def `enum`[T, E <: Enum[E] with ProtocolMessageEnum](implicit
    et: EnumType[T],
    ct: ClassTag[E]
  ): ProtobufField[T] = {
    val map = ct.runtimeClass
      .getMethod("values")
      .invoke(null)
      .asInstanceOf[Array[E]]
      .map(e => e.name() -> e)
      .toMap
    val default = et.from(map.values.find(_.getNumber == 0).get.name())
    aux2[T, EnumValueDescriptor](default)(e => et.from(e.getName))(e =>
      map(et.to(e)).getValueDescriptor
    )
  }