package scalaz
package http
package servlet
import javax.servlet.http.Cookie
import response.Response
import Util.Nel._
import Scalaz._
sealed trait HttpServletResponse {
val response: javax.servlet.http.HttpServletResponse
def update(header: String, value: String) = response.setHeader(header, value)
def update[V[_]](header: String, value: V[String])(implicit v: Each[V]) = v.each[String](value, response.addHeader(header, _))
def update(header: String, value: Int) = response.setIntHeader(header, value)
def update(header: String, value: Long) = response.setDateHeader(header, value)
def update(header: String, cookie: Cookie) = response.addCookie(cookie)
def respond[OUT[_]](res: Response[OUT])(implicit e: Each[OUT]) {
response.setStatus(res.line.status)
res.headers.foreach { case (h, v) => response.setHeader(h, v.mkString) }
val out = response.getOutputStream
e.each[Byte](res.body, out.write(_))
}
}
trait HttpServletResponses {
implicit def HttpServletResponseResponse(r: javax.servlet.http.HttpServletResponse): HttpServletResponse = new HttpServletResponse {
val response = r
}
implicit def ResponseHttpServletResponse(response: HttpServletResponse) = response.response
}
object HttpServletResponse extends HttpServletResponses