def onSuccessHead(magnet: OnStreamSuccessHeadMagnet): Directive[magnet.Out] = {
magnet.directive
}
trait OnStreamSuccessHeadMagnet {
type Out
def directive: Directive[Out]
}
object OnStreamSuccessHeadMagnet {
import akka.http.server.directives.FutureDirectives._
implicit def apply[T](s: Source[T, _])(implicit mat: ActorFlowMaterializer, tupler: Tupler[T]) = {
new OnStreamSuccessHeadMagnet {
type Out = tupler.Out
val directive = onSuccess(s.runWith(Sink.head("SourceMarshallerHeadSink")): Future[T])
}
}
}
onSuccessHead(userService.createUser(req)) { newUser =>
respondWithHeader(Location(s"/$v1/$user/${newUser.id}")) {
complete(Created -> newUser)
}
}Completing a route with a Tuple3[StatusCode, Seq[HttpHeader], T] doesn't seem to work for me.
import collection.immutable._
complete( (OK, Seq(`Cache-Control`(`no-cache`)), responseEntity) )