diff options
Diffstat (limited to 'cask/src/cask/decorators/compress.scala')
-rw-r--r-- | cask/src/cask/decorators/compress.scala | 55 |
1 files changed, 26 insertions, 29 deletions
diff --git a/cask/src/cask/decorators/compress.scala b/cask/src/cask/decorators/compress.scala index fc67dd4..22bd29e 100644 --- a/cask/src/cask/decorators/compress.scala +++ b/cask/src/cask/decorators/compress.scala @@ -9,35 +9,32 @@ import collection.JavaConverters._ class compress extends cask.Decorator{ def wrapFunction(ctx: ParamContext, delegate: Delegate) = { val acceptEncodings = ctx.exchange.getRequestHeaders.get("Accept-Encoding").asScala.flatMap(_.split(", ")) - delegate(Map()) match{ - case Router.Result.Success(v) => - val (newData, newHeaders) = if (acceptEncodings.exists(_.toLowerCase == "gzip")) { - new Response.Data { - def write(out: OutputStream): Unit = { - val wrap = new GZIPOutputStream(out) - v.data.write(wrap) - wrap.flush() - wrap.close() - } - } -> Seq("Content-Encoding" -> "gzip") - }else if (acceptEncodings.exists(_.toLowerCase == "deflate")){ - new Response.Data { - def write(out: OutputStream): Unit = { - val wrap = new DeflaterOutputStream(out) - v.data.write(wrap) - wrap.flush() - } - } -> Seq("Content-Encoding" -> "deflate") - }else v.data -> Nil - Router.Result.Success( - Response( - newData, - v.statusCode, - v.headers ++ newHeaders, - v.cookies - ) - ) - case e: Router.Result.Error => e + delegate(Map()).map{ v => + val (newData, newHeaders) = if (acceptEncodings.exists(_.toLowerCase == "gzip")) { + new Response.Data { + def write(out: OutputStream): Unit = { + val wrap = new GZIPOutputStream(out) + v.data.write(wrap) + wrap.flush() + wrap.close() + } + } -> Seq("Content-Encoding" -> "gzip") + }else if (acceptEncodings.exists(_.toLowerCase == "deflate")){ + new Response.Data { + def write(out: OutputStream): Unit = { + val wrap = new DeflaterOutputStream(out) + v.data.write(wrap) + wrap.flush() + } + } -> Seq("Content-Encoding" -> "deflate") + }else v.data -> Nil + Response( + newData, + v.statusCode, + v.headers ++ newHeaders, + v.cookies + ) } + } } |