implicit def pfMap[K, V]()

in protobuf/src/main/scala/magnolify/protobuf/ProtobufType.scala [282:320]


  implicit def pfMap[K, V](implicit
    kf: ProtobufField[K],
    vf: ProtobufField[V]
  ): ProtobufField[Map[K, V]] =
    new Aux[Map[K, V], ju.List[MapEntry[kf.FromT, vf.FromT]], ju.List[MapEntry[kf.ToT, vf.ToT]]] {

      override val default: Option[Map[K, V]] = Some(Map.empty)

      override def from(v: ju.List[MapEntry[kf.FromT, vf.FromT]])(cm: CaseMapper): Map[K, V] = {
        val b = Map.newBuilder[K, V]
        if (v != null) {
          b ++= v.asScala.map(me => kf.from(me.getKey)(cm) -> vf.from(me.getValue)(cm))
        }
        b.result()
      }

      private def newFieldBuilder(b: Message.Builder)(f: FieldDescriptor): Message.Builder =
        if (f.getType != FieldDescriptor.Type.MESSAGE) null
        else b.newBuilderForField(f)

      override def to(v: Map[K, V], b: Message.Builder)(
        cm: CaseMapper
      ): ju.List[MapEntry[kf.ToT, vf.ToT]] = {
        if (v.isEmpty) {
          null
        } else {
          val keyField = b.getDescriptorForType.findFieldByName("key")
          val valueField = b.getDescriptorForType.findFieldByName("value")
          v.map { case (k, v) =>
            b
              .setField(keyField, kf.to(k, newFieldBuilder(b)(keyField))(cm))
              .setField(valueField, vf.to(v, newFieldBuilder(b)(valueField))(cm))
              .build()
              .asInstanceOf[MapEntry[kf.ToT, vf.ToT]]
          }.toList
            .asJava
        }
      }
    }