All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalapb.grpc.ProtoUtils.scala Maven / Gradle / Ivy

The newest version!
package scalapb.grpc

import com.google.protobuf.InvalidProtocolBufferException
import scalapb.{GeneratedMessage, GeneratedMessageCompanion}
import io.grpc.Metadata

object ProtoUtils {
  class ScalaPbMetadataMarshaller[T <: GeneratedMessage](
      companion: GeneratedMessageCompanion[T]
  ) extends Metadata.BinaryMarshaller[T] {
    override def toBytes(value: T): Array[Byte] = value.toByteArray

    override def parseBytes(serialized: Array[Byte]): T = {
      try {
        companion.parseFrom(serialized)
      } catch {
        case ipbe: InvalidProtocolBufferException =>
          throw new IllegalArgumentException(ipbe)
      }
    }
  }

  def metadataMarshaller[T <: GeneratedMessage](implicit
      companion: GeneratedMessageCompanion[T]
  ): Metadata.BinaryMarshaller[T] =
    new ScalaPbMetadataMarshaller(companion)

  def keyForProto[T <: GeneratedMessage](implicit
      companion: GeneratedMessageCompanion[T]
  ): Metadata.Key[T] =
    Metadata.Key.of(
      companion.javaDescriptor.getFullName + Metadata.BINARY_HEADER_SUFFIX,
      metadataMarshaller[T]
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy