From 3a4a53535bc4f52f02f9c70bc61c2c0dce11f849 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sat, 22 Aug 2020 08:12:27 +0800 Subject: [PATCH] properly forward headers in compress decorator --- cask/src/cask/decorators/compress.scala | 2 ++ cask/src/cask/endpoints/JsonEndpoint.scala | 1 + cask/src/cask/model/Response.scala | 8 +++++--- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cask/src/cask/decorators/compress.scala b/cask/src/cask/decorators/compress.scala index 097abe4613..71f4bb4b77 100644 --- a/cask/src/cask/decorators/compress.scala +++ b/cask/src/cask/decorators/compress.scala @@ -20,6 +20,7 @@ class compress extends cask.RawDecorator{ wrap.flush() wrap.close() } + override def headers = v.data.headers } -> Seq("Content-Encoding" -> "gzip") }else if (acceptEncodings.exists(_.toLowerCase == "deflate")){ new Response.Data { @@ -28,6 +29,7 @@ class compress extends cask.RawDecorator{ v.data.write(wrap) wrap.flush() } + override def headers = v.data.headers } -> Seq("Content-Encoding" -> "deflate") }else v.data -> Nil Response( diff --git a/cask/src/cask/endpoints/JsonEndpoint.scala b/cask/src/cask/endpoints/JsonEndpoint.scala index 3630773803..01303c1028 100644 --- a/cask/src/cask/endpoints/JsonEndpoint.scala +++ b/cask/src/cask/endpoints/JsonEndpoint.scala @@ -32,6 +32,7 @@ object JsReader{ trait JsonData extends Response.Data object JsonData extends DataCompanion[JsonData]{ implicit class JsonDataImpl[T: upickle.default.Writer](t: T) extends JsonData{ + def headers = Seq("Content-Type" -> "application/json") def write(out: OutputStream) = { upickle.default.stream(t).writeBytesTo(out) out.flush() diff --git a/cask/src/cask/model/Response.scala b/cask/src/cask/model/Response.scala index 65d9b2131f..28aceed15a 100644 --- a/cask/src/cask/model/Response.scala +++ b/cask/src/cask/model/Response.scala @@ -29,7 +29,7 @@ object Response { cookies: Seq[Cookie] = Nil) = new Response(data, statusCode, headers, cookies) trait Data{ def write(out: OutputStream): Unit - def headers: Seq[(String, String)] = Nil + def headers: Seq[(String, String)] } trait DataCompanion[V]{ // Put the implicit constructors for Response[Data] into the `Data` companion @@ -50,21 +50,23 @@ object Response { object Data extends DataCompanion[Data]{ implicit class UnitData(s: Unit) extends Data{ def write(out: OutputStream) = () + def headers = Nil } implicit class WritableData[T](s: T)(implicit f: T => geny.Writable) extends Data{ val writable = f(s) def write(out: OutputStream) = writable.writeBytesTo(out) - override def headers = - super.headers ++ + def headers = writable.httpContentType.map("Content-Type" -> _).toSeq ++ writable.contentLength.map("Content-Length" -> _.toString) } implicit class NumericData[T: Numeric](s: T) extends Data{ def write(out: OutputStream) = out.write(s.toString.getBytes) + def headers = Nil } implicit class BooleanData(s: Boolean) extends Data{ def write(out: OutputStream) = out.write(s.toString.getBytes) + def headers = Nil } } }