summaryrefslogtreecommitdiff
path: root/cask/src/cask/endpoints
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-07-25 23:36:44 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-07-25 23:36:44 +0800
commit712bafb0c903a14dc0bf6b07e5529007635e004a (patch)
tree9770624d1ed63346ddb120fc6aa4182330694a72 /cask/src/cask/endpoints
parentf88c2941efdd8a1bc8f4ea7362c2163918c44a1c (diff)
downloadcask-712bafb0c903a14dc0bf6b07e5529007635e004a.tar.gz
cask-712bafb0c903a14dc0bf6b07e5529007635e004a.tar.bz2
cask-712bafb0c903a14dc0bf6b07e5529007635e004a.zip
big refactoring in preparation for allowing endpoint filters
Diffstat (limited to 'cask/src/cask/endpoints')
-rw-r--r--cask/src/cask/endpoints/FormEndpoint.scala19
-rw-r--r--cask/src/cask/endpoints/JsonEndpoint.scala17
-rw-r--r--cask/src/cask/endpoints/StaticEndpoints.scala22
-rw-r--r--cask/src/cask/endpoints/WebEndpoints.scala20
4 files changed, 19 insertions, 59 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala
index 10d1af3..99699e6 100644
--- a/cask/src/cask/endpoints/FormEndpoint.scala
+++ b/cask/src/cask/endpoints/FormEndpoint.scala
@@ -1,6 +1,5 @@
package cask.endpoints
-import cask.internal.Router.EntryPoint
import cask.internal.Router
import cask.main.Routes
import cask.model.{FormValue, ParamContext, Response}
@@ -38,27 +37,19 @@ object FormReader{
class postForm(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{
val methods = Seq("post")
type InputType = Seq[FormValue]
- def wrapMethodOutput(t: Response) = t
def parseMethodInput[T](implicit p: FormReader[T]) = p
- def handle(ctx: ParamContext,
- bindings: Map[String, String],
- routes: Routes,
- entryPoint: EntryPoint[Seq[FormValue], Routes, ParamContext]): Router.Result[Response] = {
+
+ def handle(ctx: ParamContext) = {
val formData = FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking()
val formDataBindings =
formData
.iterator()
.asScala
.map(k => (k, formData.get(k).asScala.map(FormValue.fromUndertow).toSeq))
-
- val pathBindings =
- bindings.map{case (k, v) => (k, Seq(new FormValue.Plain(v, new io.undertow.util.HeaderMap())))}
-
- val allBindings = pathBindings ++ formDataBindings
-
- entryPoint.invoke(routes, ctx, allBindings)
- .asInstanceOf[Router.Result[Response]]
+ .toMap
+ formDataBindings
}
+ def wrapPathSegment(s: String): InputType = Seq(FormValue.Plain(s, new io.undertow.util.HeaderMap))
}
diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala
index f172b2b..f740148 100644
--- a/cask/src/cask/endpoints/JsonEndpoint.scala
+++ b/cask/src/cask/endpoints/JsonEndpoint.scala
@@ -27,19 +27,8 @@ object JsReader{
class postJson(val path: String, override val subpath: Boolean = false) extends Routes.Endpoint[Response]{
val methods = Seq("post")
type InputType = ujson.Js.Value
- def wrapMethodOutput(t: Response) = t
def parseMethodInput[T](implicit p: JsReader[T]) = p
- def handle(ctx: ParamContext,
- bindings: Map[String, String],
- routes: Routes,
- entryPoint: EntryPoint[ujson.Js.Value, Routes, cask.model.ParamContext]): Router.Result[Response] = {
-
- val js = ujson.read(new String(ctx.exchange.getInputStream.readAllBytes())).asInstanceOf[ujson.Js.Obj]
-
- js.obj
- val allBindings = bindings.mapValues(ujson.Js.Str(_))
-
- entryPoint.invoke(routes, ctx, js.obj.toMap ++ allBindings)
- .asInstanceOf[Router.Result[Response]]
- }
+ def handle(ctx: ParamContext) =
+ ujson.read(new String(ctx.exchange.getInputStream.readAllBytes())).obj.toMap
+ def wrapPathSegment(s: String): InputType = ujson.Js.Str(s)
}
diff --git a/cask/src/cask/endpoints/StaticEndpoints.scala b/cask/src/cask/endpoints/StaticEndpoints.scala
index 937b9c2..f644d86 100644
--- a/cask/src/cask/endpoints/StaticEndpoints.scala
+++ b/cask/src/cask/endpoints/StaticEndpoints.scala
@@ -1,9 +1,8 @@
package cask.endpoints
import cask.internal.Router
-import cask.internal.Router.EntryPoint
import cask.main.Routes
-import cask.model.{BaseResponse, ParamContext}
+import cask.model.ParamContext
class static(val path: String) extends Routes.Endpoint[String] {
val methods = Seq("get")
@@ -11,19 +10,10 @@ class static(val path: String) extends Routes.Endpoint[String] {
override def subpath = true
def wrapOutput(t: String) = t
def parseMethodInput[T](implicit p: QueryParamReader[T]) = p
- def wrapMethodOutput(t: String) = t
-
- def handle(ctx: ParamContext,
- bindings: Map[String, String],
- routes: Routes,
- entryPoint: EntryPoint[Seq[String], Routes, cask.model.ParamContext]): Router.Result[BaseResponse] = {
- entryPoint.invoke(routes, ctx, Map()).asInstanceOf[Router.Result[String]] match{
- case Router.Result.Success(s) =>
- Router.Result.Success(cask.model.Static(s + "/" + ctx.remaining.mkString("/")))
-
- case e: Router.Result.Error => e
-
- }
-
+ override def wrapMethodOutput(ctx: ParamContext, t: String) = {
+ Router.Result.Success(cask.model.Static(t + "/" + ctx.remaining.mkString("/")))
}
+
+ def handle(ctx: ParamContext) = Map()
+ def wrapPathSegment(s: String): InputType = Seq(s)
}
diff --git a/cask/src/cask/endpoints/WebEndpoints.scala b/cask/src/cask/endpoints/WebEndpoints.scala
index 14c21ce..9eca964 100644
--- a/cask/src/cask/endpoints/WebEndpoints.scala
+++ b/cask/src/cask/endpoints/WebEndpoints.scala
@@ -10,22 +10,12 @@ import collection.JavaConverters._
trait WebEndpoint extends Routes.Endpoint[BaseResponse]{
type InputType = Seq[String]
- def wrapMethodOutput(t: BaseResponse) = t
def parseMethodInput[T](implicit p: QueryParamReader[T]) = p
- def handle(ctx: ParamContext,
- bindings: Map[String, String],
- routes: Routes,
- entryPoint: EntryPoint[Seq[String], Routes, cask.model.ParamContext]): Router.Result[BaseResponse] = {
- val allBindings =
- bindings.map{case (k, v) => (k, Seq(v))} ++
- ctx.exchange.getQueryParameters
- .asScala
- .toSeq
- .map{case (k, vs) => (k, vs.asScala.toArray.toSeq)}
-
- entryPoint.invoke(routes, ctx, allBindings)
- .asInstanceOf[Router.Result[BaseResponse]]
- }
+ def handle(ctx: ParamContext) = ctx.exchange.getQueryParameters
+ .asScala
+ .map{case (k, vs) => (k, vs.asScala.toArray.toSeq)}
+ .toMap
+ def wrapPathSegment(s: String) = Seq(s)
}
class get(val path: String, override val subpath: Boolean = false) extends WebEndpoint{
val methods = Seq("get")