in runtime/src/main/scala/org/apache/pekko/grpc/internal/UnaryCallAdapter.scala [71:103]
override def onHeaders(headers: Metadata): Unit =
this.headers = OptionVal.Some(headers)
override def onMessage(message: Res): Unit = {
val responseWithMetadata = new GrpcSingleResponse[Res] {
// close over var and make final
private val headersOnMessage = UnaryCallWithMetadataAdapter.this.headers match {
case OptionVal.Some(h) => h
case OptionVal.None => throw new RuntimeException("Never got headers, this should not happen")
}
override def value: Res = message
override def getValue(): Res = message
private lazy val sMetadata: pekko.grpc.scaladsl.Metadata =
MetadataImpl.scalaMetadataFromGoogleGrpcMetadata(headersOnMessage)
private lazy val jMetadata: pekko.grpc.javadsl.Metadata =
MetadataImpl.javaMetadataFromGoogleGrpcMetadata(headersOnMessage)
override def headers = sMetadata
override def getHeaders() = jMetadata
private lazy val sTrailer =
trailerPromise.future.map(MetadataImpl.scalaMetadataFromGoogleGrpcMetadata)(ExecutionContexts.parasitic)
private lazy val jTrailer =
trailerPromise.future.map(MetadataImpl.javaMetadataFromGoogleGrpcMetadata)(ExecutionContexts.parasitic).asJava
def trailers = sTrailer
def getTrailers() = jTrailer
}
if (!responsePromise.trySuccess(responseWithMetadata)) {
throw Status.INTERNAL.withDescription("More than one value received for unary call").asRuntimeException()
}
}