diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 23:36:44 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-25 23:36:44 +0800 |
commit | 712bafb0c903a14dc0bf6b07e5529007635e004a (patch) | |
tree | 9770624d1ed63346ddb120fc6aa4182330694a72 /cask/src/cask/endpoints | |
parent | f88c2941efdd8a1bc8f4ea7362c2163918c44a1c (diff) | |
download | cask-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.scala | 19 | ||||
-rw-r--r-- | cask/src/cask/endpoints/JsonEndpoint.scala | 17 | ||||
-rw-r--r-- | cask/src/cask/endpoints/StaticEndpoints.scala | 22 | ||||
-rw-r--r-- | cask/src/cask/endpoints/WebEndpoints.scala | 20 |
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") |