一个基本的 Akka Http 路由问题:协调签名

A Basic Akka Http Routing question: reconciling signatures

以下代码举例说明了 Akka http 路由中的常见模式:

lazy val routes:Route {... 
  pathPrefix("aPath")
    path(Remaining) { dirName => 
      get { 
        onComplete(aFuture(dirName)) {
          case Success(res) => handleResult(res)  
          ...

我的问题涉及此代码的最后两行。

onComplete() 的签名如何与 handleResult() 的 return 值兼容?

onComplete() 的签名是, def onComplete[T](future: ⇒ Future[T]): Directive1[Try[T]] handleResult() 的签名是def handleResult(result: Either[ChazErrors,OurOwnInfoRecordCaseClass]): StandardRoute

StandardRoute 如何与 Directive1[Try[T]] 兼容?据我了解Akka Http(我是新手),Directives产生Routes,但Routes不等同于Directives。

Richard Imaoka 的 article 解释了所有正在进行的 implicit 转换。

特别是 w.r.t。 Route 不是 Directive 的事实,这个隐式转换负责:

object StandardRoute {

//...

/**
 * Converts the StandardRoute into a directive that never passes the request to its
 * inner route (and always returns its underlying route).
 */
implicit def toDirective[L: Tuple](route: StandardRoute): Directive[L] = 
  Directive[L] { _ ⇒ route }
}