aboutsummaryrefslogtreecommitdiff
path: root/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala')
-rw-r--r--core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala70
1 files changed, 40 insertions, 30 deletions
diff --git a/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala b/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala
index 8d14907..fdbb322 100644
--- a/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala
+++ b/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala
@@ -1,6 +1,11 @@
package com.softwaremill.sttp
-import java.io.{ByteArrayOutputStream, InputStream, OutputStream, OutputStreamWriter}
+import java.io.{
+ ByteArrayOutputStream,
+ InputStream,
+ OutputStream,
+ OutputStreamWriter
+}
import java.net.HttpURLConnection
import java.nio.channels.Channels
import java.nio.file.Files
@@ -11,7 +16,8 @@ import scala.annotation.tailrec
import scala.io.Source
object HttpConnectionSttpHandler extends SttpHandler[Id, Nothing] {
- override def send[T](r: Request, responseAs: ResponseAs[T, Nothing]): Response[T] = {
+ override def send[T](r: Request,
+ responseAs: ResponseAs[T, Nothing]): Response[T] = {
val c = r.uri.toURL.openConnection().asInstanceOf[HttpURLConnection]
c.setRequestMethod(r.method.m)
r.headers.foreach { case (k, v) => c.setRequestProperty(k, v) }
@@ -45,14 +51,16 @@ object HttpConnectionSttpHandler extends SttpHandler[Id, Nothing] {
case StringBody(b, encoding) =>
val writer = new OutputStreamWriter(c.getOutputStream, encoding)
- try writer.write(b) finally writer.close()
+ try writer.write(b)
+ finally writer.close()
case ByteArrayBody(b) =>
c.getOutputStream.write(b)
case ByteBufferBody(b) =>
val channel = Channels.newChannel(c.getOutputStream)
- try channel.write(b) finally channel.close()
+ try channel.write(b)
+ finally channel.close()
case InputStreamBody(b) =>
copyStream(b, c.getOutputStream)
@@ -68,34 +76,36 @@ object HttpConnectionSttpHandler extends SttpHandler[Id, Nothing] {
}
}
- private def readResponse[T](is: InputStream, responseAs: ResponseAs[T, Nothing]): T = responseAs match {
- case IgnoreResponse =>
- @tailrec def consume(): Unit = if (is.read() != -1) consume()
- consume()
-
- case ResponseAsString(enc) =>
- Source.fromInputStream(is, enc).mkString
-
- case ResponseAsByteArray =>
- val os = new ByteArrayOutputStream
- var read = 0
- val buf = new Array[Byte](1024)
-
- @tailrec
- def transfer(): Unit = {
- read = is.read(buf, 0, buf.length)
- if (read != -1) {
- os.write(buf, 0, read)
- transfer()
+ private def readResponse[T](is: InputStream,
+ responseAs: ResponseAs[T, Nothing]): T =
+ responseAs match {
+ case IgnoreResponse =>
+ @tailrec def consume(): Unit = if (is.read() != -1) consume()
+ consume()
+
+ case ResponseAsString(enc) =>
+ Source.fromInputStream(is, enc).mkString
+
+ case ResponseAsByteArray =>
+ val os = new ByteArrayOutputStream
+ var read = 0
+ val buf = new Array[Byte](1024)
+
+ @tailrec
+ def transfer(): Unit = {
+ read = is.read(buf, 0, buf.length)
+ if (read != -1) {
+ os.write(buf, 0, read)
+ transfer()
+ }
}
- }
- transfer()
+ transfer()
- os.toByteArray
+ os.toByteArray
- case ResponseAsStream() =>
- // only possible when the user requests the response as a stream of Nothing. Oh well ...
- throw new IllegalStateException()
- }
+ case ResponseAsStream() =>
+ // only possible when the user requests the response as a stream of Nothing. Oh well ...
+ throw new IllegalStateException()
+ }
}