2015-12-04 2 views
3

я директива, определяется какМожно ли использовать неявные параметры при определении директив маршрутизации?

def allowedRoles(roles: UserRole*)(implicit login: Login): Directive0 = ??? 

Но я не; кажется, чтобы быть в состоянии использовать его в без того, чтобы в явном виде прохода в параметре login

def myRoutes(implicit req: HttpRequest, login: Login) = { 
    path("example"/"path") { 
    get { 
     allowedRoles(Administrator) { // ← fails 
     handleGet 
     } 
    } 
    } 
} 

если я пытаюсь для его компиляции это не соответствует несоответствию типа:

[error] found : akka.http.scaladsl.server.Route 
[error]  (which expands to) akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult] 
[error] required: com.example.Login 
[error]   allowedRoles(Administrator) { handleGet } } 

если я меняю отмеченную линию до allowedRoles(Administrator)(login), тогда он работает, но мне кажется, что мне не нужно это делать, чего мне не хватает?

+0

Вы пытались определить логин (внутри определения MyRoutes), как неявное? – Nyavro

ответ

4

Это происходит потому, что по правилам Scala { handleGet } считается вторым списком параметров allowedRoles. Чтобы это исправить, чтобы было ясно, что это на самом деле параметр Directive0.apply:

allowedRoles(Administrator).apply { handleGet } 
Смежные вопросы