in protobuf/src/main/scala/magnolify/protobuf/ProtobufType.scala [42:67]
def apply[T, MsgT <: Message](cm: CaseMapper)(implicit
f: ProtobufField[T],
ct: ClassTag[MsgT]
): ProtobufType[T, MsgT] = f match {
case r: ProtobufField.Record[_] =>
new ProtobufType[T, MsgT] {
{
val descriptor = ct.runtimeClass
.getMethod("getDescriptor")
.invoke(null)
.asInstanceOf[Descriptor]
r.checkDefaults(descriptor)(cm)
}
@transient private lazy val _newBuilder: Method = ct.runtimeClass.getMethod("newBuilder")
private def newBuilder(): Message.Builder =
_newBuilder.invoke(null).asInstanceOf[Message.Builder]
private val caseMapper: CaseMapper = cm
override def from(v: MsgT): T = r.from(v)(caseMapper)
override def to(v: T): MsgT = r.to(v, newBuilder())(caseMapper).asInstanceOf[MsgT]
}
case _ =>
throw new IllegalArgumentException(s"ProtobufType can only be created from Record. Got $f")
}