diff options
author | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-28 19:38:43 +0800 |
---|---|---|
committer | Li Haoyi <haoyi.sg@gmail.com> | 2018-07-28 19:38:43 +0800 |
commit | 8b14cd206e008b4001f9b257f48870c8d40e8498 (patch) | |
tree | c335308af4e1ec2417368421bb97a5c56aaf686e /cask/src | |
parent | 755eb8cd839ef1c34886db12056ac1aa56c0caaa (diff) | |
download | cask-8b14cd206e008b4001f9b257f48870c8d40e8498.tar.gz cask-8b14cd206e008b4001f9b257f48870c8d40e8498.tar.bz2 cask-8b14cd206e008b4001f9b257f48870c8d40e8498.zip |
first pass at a readme
Diffstat (limited to 'cask/src')
-rw-r--r-- | cask/src/cask/endpoints/FormEndpoint.scala | 35 | ||||
-rw-r--r-- | cask/src/cask/model/Params.scala | 36 | ||||
-rw-r--r-- | cask/src/cask/package.scala | 4 |
3 files changed, 46 insertions, 29 deletions
diff --git a/cask/src/cask/endpoints/FormEndpoint.scala b/cask/src/cask/endpoints/FormEndpoint.scala index c58c765..715c803 100644 --- a/cask/src/cask/endpoints/FormEndpoint.scala +++ b/cask/src/cask/endpoints/FormEndpoint.scala @@ -2,42 +2,51 @@ package cask.endpoints import cask.internal.{Router, Util} import cask.main.{Endpoint, Routes} -import cask.model.{FormValue, ParamContext, Response} +import cask.model._ import io.undertow.server.handlers.form.FormParserFactory import collection.JavaConverters._ -sealed trait FormReader[T] extends Router.ArgReader[Seq[FormValue], T, ParamContext] +sealed trait FormReader[T] extends Router.ArgReader[Seq[FormEntry], T, ParamContext] object FormReader{ implicit def paramFormReader[T: QueryParamReader] = new FormReader[T]{ def arity = implicitly[QueryParamReader[T]].arity - def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = { - implicitly[QueryParamReader[T]].read(ctx, label, if (input == null) null else input.map(_.value)) + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = { + implicitly[QueryParamReader[T]].read(ctx, label, if (input == null) null else input.map(_.valueOrFileName)) } } + implicit def formEntryReader = new FormReader[FormEntry]{ + def arity = 1 + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head + } + implicit def formEntriesReader = new FormReader[Seq[FormEntry]]{ + def arity = 1 + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input + } + implicit def formValueReader = new FormReader[FormValue]{ def arity = 1 - def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.head + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormValue] } implicit def formValuesReader = new FormReader[Seq[FormValue]]{ def arity = 1 - def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormValue]) } - implicit def formValueFileReader = new FormReader[FormValue.File]{ + implicit def formFileReader = new FormReader[FormFile]{ def arity = 1 - def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.head.asFile.get + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.head.asInstanceOf[FormFile] } - implicit def formValuesFileReader = new FormReader[Seq[FormValue.File]]{ + implicit def formFilesReader = new FormReader[Seq[FormFile]]{ def arity = 1 - def read(ctx: ParamContext, label: String, input: Seq[FormValue]) = input.map(_.asFile.get) + def read(ctx: ParamContext, label: String, input: Seq[FormEntry]) = input.map(_.asInstanceOf[FormFile]) } } class postForm(val path: String, override val subpath: Boolean = false) extends Endpoint[Response]{ val methods = Seq("post") - type Input = Seq[FormValue] + type Input = Seq[FormEntry] type InputParser[T] = FormReader[T] def getRawParams(ctx: ParamContext) = { for{ @@ -51,11 +60,11 @@ class postForm(val path: String, override val subpath: Boolean = false) extends formData .iterator() .asScala - .map(k => (k, formData.get(k).asScala.map(FormValue.fromUndertow).toSeq)) + .map(k => (k, formData.get(k).asScala.map(FormEntry.fromUndertow).toSeq)) .toMap formDataBindings } } - def wrapPathSegment(s: String): Input = Seq(FormValue.Plain(s, new io.undertow.util.HeaderMap)) + def wrapPathSegment(s: String): Input = Seq(FormValue(s, new io.undertow.util.HeaderMap)) } diff --git a/cask/src/cask/model/Params.scala b/cask/src/cask/model/Params.scala index 8f206c8..901cca4 100644 --- a/cask/src/cask/model/Params.scala +++ b/cask/src/cask/model/Params.scala @@ -76,24 +76,28 @@ case class Cookie(name: String, } -object FormValue{ +sealed trait FormEntry{ + def valueOrFileName: String + def headers: io.undertow.util.HeaderMap + def asFile: Option[FormFile] = this match{ + case p: FormValue => None + case p: FormFile => Some(p) + } +} +object FormEntry{ def fromUndertow(from: io.undertow.server.handlers.form.FormData.FormValue) = { - if (!from.isFile) Plain(from.getValue, from.getHeaders) - else File(from.getValue, from.getFileName, from.getPath, from.getHeaders) + if (!from.isFile) FormValue(from.getValue, from.getHeaders) + else FormFile(from.getFileName, from.getPath, from.getHeaders) } - case class Plain(value: String, - headers: io.undertow.util.HeaderMap) extends FormValue - case class File(value: String, - fileName: String, - filePath: java.nio.file.Path, - headers: io.undertow.util.HeaderMap) extends FormValue } -sealed trait FormValue{ - def value: String - def headers: io.undertow.util.HeaderMap - def asFile: Option[FormValue.File] = this match{ - case p: FormValue.Plain => None - case p: FormValue.File => Some(p) - } +case class FormValue(value: String, + headers: io.undertow.util.HeaderMap) extends FormEntry{ + def valueOrFileName = value +} + +case class FormFile(fileName: String, + filePath: java.nio.file.Path, + headers: io.undertow.util.HeaderMap) extends FormEntry{ + def valueOrFileName = fileName } diff --git a/cask/src/cask/package.scala b/cask/src/cask/package.scala index 37e61e2..24a0a20 100644 --- a/cask/src/cask/package.scala +++ b/cask/src/cask/package.scala @@ -6,8 +6,12 @@ package object cask { val Abort = model.Abort type Redirect = model.Redirect val Redirect = model.Redirect + type FormEntry = model.FormEntry + val FormEntry = model.FormEntry type FormValue = model.FormValue val FormValue = model.FormValue + type FormFile = model.FormFile + val FormFile = model.FormFile type Cookie = model.Cookie val Cookie = model.Cookie type Subpath = model.Subpath |