如何将不同的 Spray 指令嵌套到 1 个指令中

How do you Nest different Spray Directives into 1 directive

假设我有 1 个身份验证指令。身份验证后,我想登录。这是我目前所做的:

get(...) {
  myauthdirective() { v =>
     myloggingdirective(v) {
        ...
     }
  }
}

所以我想将其转换为单个指令,而不是每次需要验证时都必须有 2 个指令。

我尝试使用平面地图,但这似乎不起作用,因为验证 returns a Directive1 和 logRequestResponse returns Directive0。

// Does not work!
authenticate(myAuthMagnet).flatMap {
  case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca)))
}

所以我用地图试了一下,但它似乎没有进入我的日志磁铁功能。

// Does not work either!
authenticate(myAuthMagnet).map {
  case ca: returnType => 
    logRequestResponse(LoggingMagnet(logme(ca))) // does not go into logme function for some reason
    ca
}

我也不能直接调用 logme,因为我也需要请求和响应对象。

有没有办法用 return 不同指令类型的 2 个指令创建一个新指令?谢谢。

您的实施中缺少一件小事。您需要在登录后提供价值。所以实现应该是这样的:

authenticate(myAuthMagnet).flatMap {
  case ca: returnType => logRequestResponse(LoggingMagnet(logme(ca))) & provide(ca)
}