summaryrefslogtreecommitdiff
path: root/cask
diff options
context:
space:
mode:
authorLi Haoyi <haoyi.sg@gmail.com>2018-08-12 23:10:39 +0800
committerLi Haoyi <haoyi.sg@gmail.com>2018-08-12 23:10:39 +0800
commit11f8fa2faaef68684a91716f6331a4e6e1463b3b (patch)
tree0bbe87d1b0cfd759f0fae0c8a0180ec0d78e5f16 /cask
parentc0f39d743fbdf07544a6f5b6284d7123e5c36296 (diff)
downloadcask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.tar.gz
cask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.tar.bz2
cask-11f8fa2faaef68684a91716f6331a4e6e1463b3b.zip
support for java <9
Diffstat (limited to 'cask')
-rw-r--r--cask/src/cask/internal/Util.scala15
-rw-r--r--cask/src/cask/model/Params.scala8
-rw-r--r--cask/src/cask/model/Response.scala4
3 files changed, 24 insertions, 3 deletions
diff --git a/cask/src/cask/internal/Util.scala b/cask/src/cask/internal/Util.scala
index 98c30c4..b4f33a8 100644
--- a/cask/src/cask/internal/Util.scala
+++ b/cask/src/cask/internal/Util.scala
@@ -1,11 +1,24 @@
package cask.internal
-import java.io.{PrintWriter, StringWriter}
+import java.io.{InputStream, PrintWriter, StringWriter}
import scala.collection.generic.CanBuildFrom
import scala.collection.mutable
+import java.io.OutputStream
object Util {
+ def transferTo(in: InputStream, out: OutputStream) = {
+ val buffer = new Array[Byte](8192)
+
+ while ({
+ in.read(buffer) match{
+ case -1 => false
+ case n =>
+ out.write(buffer, 0, n)
+ true
+ }
+ }) ()
+ }
def pluralize(s: String, n: Int) = {
if (n == 1) s else s + "s"
}
diff --git a/cask/src/cask/model/Params.scala b/cask/src/cask/model/Params.scala
index 901cca4..27c1a68 100644
--- a/cask/src/cask/model/Params.scala
+++ b/cask/src/cask/model/Params.scala
@@ -1,8 +1,9 @@
package cask.model
-import java.io.InputStream
+import java.io.{ByteArrayOutputStream, InputStream}
import cask.endpoints.ParamReader.NilParam
+import cask.internal.Util
import io.undertow.server.HttpServerExchange
import io.undertow.server.handlers.CookieImpl
@@ -17,6 +18,11 @@ case class Request(exchange: HttpServerExchange){
exchange.getRequestCookies.asScala.mapValues(Cookie.fromUndertow).toMap
}
lazy val data: InputStream = exchange.getInputStream
+ def readAllBytes() = {
+ val baos = new ByteArrayOutputStream()
+ Util.transferTo(data, baos)
+ baos.toByteArray
+ }
lazy val queryParams: Map[String, Seq[String]] = {
exchange.getQueryParameters.asScala.mapValues(_.asScala.toArray.toSeq).toMap
}
diff --git a/cask/src/cask/model/Response.scala b/cask/src/cask/model/Response.scala
index 15f46a7..979c442 100644
--- a/cask/src/cask/model/Response.scala
+++ b/cask/src/cask/model/Response.scala
@@ -2,6 +2,8 @@ package cask.model
import java.io.{InputStream, OutputStream, OutputStreamWriter}
+import cask.internal.Util
+
trait Response{
def data: Response.Data
@@ -31,7 +33,7 @@ object Response{
def write(out: OutputStream) = out.write(b)
}
implicit class StreamData(b: InputStream) extends Data{
- def write(out: OutputStream) = b.transferTo(out)
+ def write(out: OutputStream) = Util.transferTo(b, out)
}
implicit def JsonResponse[T: upickle.default.Writer](t: T) = new Data{
def write(out: OutputStream) = implicitly[upickle.default.Writer[T]].write(