diff options
Diffstat (limited to 'cask/src/cask/endpoints/FormEndpoint.scala')
-rw-r--r-- | cask/src/cask/endpoints/FormEndpoint.scala | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index 29265b9..1345489 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -3,49 +3,48 @@ package cask.endpoints import cask.internal.Router.EntryPoint import cask.internal.Router import cask.main.Routes -import cask.model.{FormValue, Response} +import cask.model.{ParamContext, Response} import io.undertow.server.HttpServerExchange import io.undertow.server.handlers.form.FormParserFactory import collection.JavaConverters._ -sealed trait FormReader[T] extends Router.ArgReader[Seq[FormValue], T, (HttpServerExchange, Seq[String])] +sealed trait FormReader[T] extends Router.ArgReader[Seq[FormValue], T, cask.model.ParamContext] object FormReader{ implicit def paramFormReader[T: QueryParamReader] = new FormReader[T]{ def arity = implicitly[QueryParamReader[T]].arity - def read(ctx: (HttpServerExchange, Seq[String]), input: Seq[FormValue]) = { + def read(ctx: cask.model.ParamContext, input: Seq[FormValue]) = { implicitly[QueryParamReader[T]].read(ctx, input.map(_.value)) } } implicit def formValueReader = new FormReader[FormValue]{ def arity = 1 - def read(ctx: (HttpServerExchange, Seq[String]), input: Seq[FormValue]) = input.head + def read(ctx: cask.model.ParamContext, input: Seq[FormValue]) = input.head } implicit def formValuesReader = new FormReader[Seq[FormValue]]{ def arity = 1 - def read(ctx: (HttpServerExchange, Seq[String]), input: Seq[FormValue]) = input + def read(ctx: cask.model.ParamContext, input: Seq[FormValue]) = input } implicit def formValueFileReader = new FormReader[FormValue.File]{ def arity = 1 - def read(ctx: (HttpServerExchange, Seq[String]), input: Seq[FormValue]) = input.head.asFile.get + def read(ctx: cask.model.ParamContext, input: Seq[FormValue]) = input.head.asFile.get } implicit def formValuesFileReader = new FormReader[Seq[FormValue.File]]{ def arity = 1 - def read(ctx: (HttpServerExchange, Seq[String]), input: Seq[FormValue]) = input.map(_.asFile.get) + def read(ctx: cask.model.ParamContext, input: Seq[FormValue]) = input.map(_.asFile.get) } } class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{ type InputType = Seq[FormValue] def wrapMethodOutput(t: Response) = t def parseMethodInput[T](implicit p: FormReader[T]) = p - def handle(exchange: HttpServerExchange, - remaining: Seq[String], + def handle(ctx: ParamContext, bindings: Map[String, String], routes: Routes, - entryPoint: EntryPoint[Seq[FormValue], Routes, (HttpServerExchange, Seq[String])]): Router.Result[Response] = { + entryPoint: EntryPoint[Seq[FormValue], Routes, cask.model.ParamContext]): Router.Result[Response] = { - val formData = FormParserFactory.builder().build().createParser(exchange).parseBlocking() + val formData = FormParserFactory.builder().build().createParser(ctx.exchange).parseBlocking() val formDataBindings = formData .iterator() @@ -56,7 +55,7 @@ class postForm(val path: String, override val subpath: Boolean = false) extends val pathBindings = bindings.map{case (k, v) => (k, Seq(new FormValue.Plain(v, new io.undertow.util.HeaderMap())))} - entryPoint.invoke(routes, (exchange, remaining), pathBindings ++ formDataBindings) + entryPoint.invoke(routes, ctx, pathBindings ++ formDataBindings) .asInstanceOf[Router.Result[Response]] } } |