in runtime/src/main/scala/org/apache/pekko/grpc/internal/ServerReflectionImpl.scala [39:69]
def serverReflectionInfo(in: Source[ServerReflectionRequest, NotUsed]): Source[ServerReflectionResponse, NotUsed] = {
in.map(req => {
import ServerReflectionRequest.{ MessageRequest => In }
import ServerReflectionResponse.{ MessageResponse => Out }
val response = req.messageRequest match {
case In.Empty =>
Out.Empty
case In.FileByFilename(fileName) =>
val list = fileDescriptors.get(fileName).map(getProtoBytes).toList
Out.FileDescriptorResponse(FileDescriptorResponse(list))
case In.FileContainingSymbol(symbol) =>
val list = findFileDescForSymbol(symbol, fileDescriptors).map(getProtoBytes).toList
Out.FileDescriptorResponse(FileDescriptorResponse(list))
case In.FileContainingExtension(ExtensionRequest(container, number, _)) =>
val list = findFileDescForExtension(container, number, fileDescriptors).map(getProtoBytes).toList
Out.FileDescriptorResponse(FileDescriptorResponse(list))
case In.AllExtensionNumbersOfType(container) =>
val list =
findExtensionNumbersForContainingType(
container,
fileDescriptors) // TODO should we throw a NOT_FOUND if we don't know the container type at all?
Out.AllExtensionNumbersResponse(ExtensionNumberResponse(container, list))
case In.ListServices(_) =>
val list = services.map(s => ServiceResponse(s))
Out.ListServicesResponse(ListServiceResponse(list))
}
// TODO Validate assumptions here
ServerReflectionResponse(req.host, Some(req), response)
})
}