summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2019-10-09 10:27:37 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2019-10-09 10:27:37 +0800
commitfb203e85b849817943f85d9c7368695fb8c78583 (patch)
tree271e3be5786f52c02ffb3af0f2c7adbee8a70689
parentcecd94d094ca0e77a03a1a2561a2955565e4df22 (diff)
downloadcask-fb203e85b849817943f85d9c7368695fb8c78583.tar.gz
cask-fb203e85b849817943f85d9c7368695fb8c78583.tar.bz2
cask-fb203e85b849817943f85d9c7368695fb8c78583.zip
Allow `cask.decorators.compress` to skip results it doesn't care about
-rw-r--r--cask/src/cask/decorators/compress.scala2
-rw-r--r--cask/src/cask/endpoints/JsonEndpoint.scala1
-rw-r--r--cask/src/cask/router/Result.scala6
3 files changed, 7 insertions, 2 deletions
diff --git a/cask/src/cask/decorators/compress.scala b/cask/src/cask/decorators/compress.scala
index 3738bd0..61d76f6 100644
--- a/cask/src/cask/decorators/compress.scala
+++ b/cask/src/cask/decorators/compress.scala
@@ -11,7 +11,7 @@ class compress extends cask.RawDecorator{
.toSeq
.flatMap(_.asScala)
.flatMap(_.split(", "))
- delegate(Map()).map{ v =>
+ delegate(Map()).transform{ case v: cask.Response[_] =>
val (newData, newHeaders) = if (acceptEncodings.exists(_.toLowerCase == "gzip")) {
new Response.Data {
def write(out: OutputStream): Unit = {
diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala
index 842eae6..31109d9 100644
--- a/cask/src/cask/endpoints/JsonEndpoint.scala
+++ b/cask/src/cask/endpoints/JsonEndpoint.scala
@@ -85,7 +85,6 @@ class getJson(val path: String, override val subpath: Boolean = false)
type InputParser[T] = QueryParamReader[T]
override type OuterReturned = Result[Response.Raw]
def wrapFunction(ctx: Request, delegate: Delegate): Result[Response.Raw] = {
-
delegate(WebEndpoint.buildMapFromQueryParams(ctx))
}
def wrapPathSegment(s: String) = Seq(s)
diff --git a/cask/src/cask/router/Result.scala b/cask/src/cask/router/Result.scala
index 52ef0f8..e38ee28 100644
--- a/cask/src/cask/router/Result.scala
+++ b/cask/src/cask/router/Result.scala
@@ -9,6 +9,7 @@ package cask.router
*/
sealed trait Result[+T]{
def map[V](f: T => V): Result[V]
+ def transform[V](f: PartialFunction[T, V]): Result[V]
}
object Result{
@@ -18,6 +19,10 @@ object Result{
*/
case class Success[T](value: T) extends Result[T]{
def map[V](f: T => V) = Success(f(value))
+ def transform[V](f: PartialFunction[T, V]) = f.lift(value) match {
+ case None => Success(value).asInstanceOf[Result[V]]
+ case Some(res) => Success(res)
+ }
}
/**
@@ -25,6 +30,7 @@ object Result{
*/
sealed trait Error extends Result[Nothing]{
def map[V](f: Nothing => V) = this
+ def transform[V](f: PartialFunction[Nothing, V]) = this
}