package scalaz
package http
package servlet
import Scalaz._
import Util.Nel._
sealed trait HttpServlet {
val servlet: javax.servlet.http.HttpServlet
def resource(path: String) = Option(servlet.getServletContext.getResourceAsStream(path)) map (x => x)
}
import request.Request
trait HttpServlets {
implicit def HttpServletServlet(s: javax.servlet.http.HttpServlet): HttpServlet = new HttpServlet {
val servlet = s
}
implicit def ServletHttpServlet(s: HttpServlet) = s.servlet
implicit def Resource(path: NonEmptyList[Char]): { def ?[A](found: Iterator[Byte] => A, notFound: => A)(implicit s: HttpServlet): A } = new {
def ?[A](found: Iterator[Byte] => A, notFound: => A)(implicit s: HttpServlet) =
s.resource(path) map (z => found(z.elements)) getOrElse notFound
}
}
object HttpServlet extends HttpServlets {
def resource[A](path: String, found: Iterator[Byte] => A, notFound: => A)(implicit s: HttpServlet) =
s.resource(path) map (z => found(z.elements)) getOrElse notFound
def resource[IN[_], A](found: Iterator[Byte] => A, notFound: => A)(implicit s: HttpServlet, request: Request[IN]): A =
resource(request.path.mkString, found, notFound)
}