summaryrefslogtreecommitdiff
path: root/cask/src
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-07-28 19:38:43 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-07-28 19:38:43 +0800
commit8b14cd206e008b4001f9b257f48870c8d40e8498 (patch)
treec335308af4e1ec2417368421bb97a5c56aaf686e /cask/src
parent755eb8cd839ef1c34886db12056ac1aa56c0caaa (diff)
downloadcask-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.scala35
-rw-r--r--cask/src/cask/model/Params.scala36
-rw-r--r--cask/src/cask/package.scala4
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