你如何将不同的喷雾指令嵌入1指令中

时间:2015-10-07 17:54:50

标签: scala spray spray-dsl spray-routing

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

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

因此,我想将其转换为单个指令,而不是每次需要进行身份验证时都必须拥有2个指令。

我尝试使用平面地图,但这似乎不起作用,因为authenticate返回Directive1而logRequestResponse返回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,因为我也需要请求和响应对象。

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

1 个答案:

答案 0 :(得分:2)

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

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