一个基本的 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 }
}
以下代码举例说明了 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 }
}