我可以修改完成块中的 http 响应状态吗?

Can I modify http response status in completion block?

有没有办法修改完整的 {} 块内的 http 状态代码?我已经定义了一个 Marshaller 来与 scalaz.concurrent.Task 一起工作,就像这样:

implicit def taskMarshaller[A](implicit m: Marshaller[A]) = Marshaller[scalaz.concurrent.Task[A]]{(task, ctx) => task.runAsync(_.fold(l => throw l, r => m(r, ctx))) }

我也是

complete { Task {...} }

我希望能够根据任务的结果修改响应中的 http 状态代码。

关键是对 scalaz.concurrent.Task[(StatusCode, A)] 使用 ToResponseMarshaller,如下所示:

implicit def scalazTaskWithStatusMarshaller[A](implicit m: ToResponseMarshaller[(StatusCode, A)]): ToResponseMarshaller[scalaz.concurrent.Task[(StatusCode, A)]] = ToResponseMarshaller[scalaz.concurrent.Task[(StatusCode, A)]] { (task, ctx) => task.runAsync(_.fold(l => throw l, r => m(r, ctx))) }