From fb203e85b849817943f85d9c7368695fb8c78583 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Wed, 9 Oct 2019 10:27:37 +0800 Subject: Allow `cask.decorators.compress` to skip results it doesn't care about --- cask/src/cask/decorators/compress.scala | 2 +- cask/src/cask/endpoints/JsonEndpoint.scala | 1 - cask/src/cask/router/Result.scala | 6 ++++++ 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 } -- cgit v1.2.3