in protobuf/src/main/scala/magnolify/protobuf/ProtobufType.scala [244:261]
implicit def pfOption[T](implicit f: ProtobufField[T]): ProtobufField[Option[T]] =
new Aux[Option[T], f.FromT, f.ToT] {
override val default: Option[Option[T]] = f.default match {
case Some(v) => Some(Some(v))
case None => None
}
// we must use Option instead of Some because
// the underlying field may interpret custom values as null
// eg. Unsafe enums are encoded as string and default "" is treated as None
override def from(v: f.FromT)(cm: CaseMapper): Option[T] =
if (v == null) None else Option(f.from(v)(cm))
override def to(v: Option[T], b: Message.Builder)(cm: CaseMapper): f.ToT = v match {
case None => null.asInstanceOf[f.ToT]
case Some(x) => f.to(x, b)(cm)
}
}