Основной вопрос маршрутизации Akka Http: согласование подписей - PullRequest
0 голосов
/ 10 сентября 2018

Следующий код иллюстрирует общий шаблон маршрутизации Akka http:

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

Мой вопрос касается двух последних строк этого кода.

Как подпись onComplete () совместима с возвращаемым значением handleResult ()?

Подпись onComplete () есть, def onComplete[T](future: ⇒ Future[T]): Directive1[Try[T]] Подпись handleResult (): def handleResult(result: Either[ChazErrors,OurOwnInfoRecordCaseClass]): StandardRoute

Как StandardRoute совместим с Directive1[Try[T]]? Как я понимаю, Akka Http (я новичок), Директивы производят Маршруты, но Маршруты не эквивалентны Директивам.

1 Ответ

0 голосов
/ 02 октября 2018

Эта статья Ричарда Имаоки объясняет все происходящие implicit преобразования.

Конкретно w.r.t. тот факт, что Route s не Directive s, это неявное преобразование заботится об этом:

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 }
}
...