aboutsummaryrefslogtreecommitdiff
path: root/okhttp-client-handler
diff options
context:
space:
mode:
authoradamw <adam@warski.org>2017-08-04 13:06:36 +0200
committeradamw <adam@warski.org>2017-08-04 13:06:36 +0200
commit69d7ee463848a620b80742a8c38c5798af909479 (patch)
tree53645133d1060960b9c5b5eaf0a4e2112258206c /okhttp-client-handler
parentab566fd5cf0f54e8e69b2917b32e57f2321d49ee (diff)
downloadsttp-69d7ee463848a620b80742a8c38c5798af909479.tar.gz
sttp-69d7ee463848a620b80742a8c38c5798af909479.tar.bz2
sttp-69d7ee463848a620b80742a8c38c5798af909479.zip
Extracting common logic for handling basic responses eagerly
Diffstat (limited to 'okhttp-client-handler')
-rw-r--r--okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala29
1 files changed, 14 insertions, 15 deletions
diff --git a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala
index cb1103b..f57487f 100644
--- a/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala
+++ b/okhttp-client-handler/src/main/scala/com/softwaremill/sttp/okhttp/OkHttpClientHandler.scala
@@ -4,6 +4,7 @@ import java.io.IOException
import java.nio.charset.Charset
import com.softwaremill.sttp._
+import com.softwaremill.sttp.model.ResponseAs.EagerResponseHandler
import com.softwaremill.sttp.model._
import okhttp3.internal.http.HttpMethod
import okhttp3.{
@@ -20,6 +21,7 @@ import okio.{BufferedSink, Okio}
import scala.collection.JavaConverters._
import scala.concurrent.{ExecutionContext, Future, Promise}
import scala.language.higherKinds
+import scala.util.{Failure, Try}
abstract class OkHttpClientHandler[R[_], S](client: OkHttpClient)
extends SttpHandler[R, S] {
@@ -66,7 +68,7 @@ abstract class OkHttpClientHandler[R[_], S](client: OkHttpClient)
private[okhttp] def readResponse[T](
res: OkHttpResponse,
responseAs: ResponseAs[T, S]): R[Response[T]] = {
- val body = readResponseBody(res, responseAs)
+ val body = responseHandler(res).handle(responseAs, responseMonad)
val headers = res
.headers()
@@ -77,21 +79,18 @@ abstract class OkHttpClientHandler[R[_], S](client: OkHttpClient)
responseMonad.map(body, Response(_: T, res.code(), headers.toList))
}
- private def readResponseBody[T](res: OkHttpResponse,
- responseAs: ResponseAs[T, S]): R[T] = {
- responseAs match {
- case IgnoreResponse => responseMonad.unit(res.body().close())
- case ResponseAsString(encoding) =>
- responseMonad.unit(
- res.body().source().readString(Charset.forName(encoding)))
- case ResponseAsByteArray => responseMonad.unit(res.body().bytes())
- case MappedResponseAs(raw, g) =>
- responseMonad.map(readResponseBody(res, raw), g)
- case ResponseAsStream() =>
- responseMonad.error(
- new IllegalStateException("Streaming isn't supported"))
+ private def responseHandler(res: OkHttpResponse) =
+ new EagerResponseHandler[S] {
+ override def handleBasic[T](bra: BasicResponseAs[T, S]): Try[T] =
+ bra match {
+ case IgnoreResponse => Try(res.body().close())
+ case ResponseAsString(encoding) =>
+ Try(res.body().source().readString(Charset.forName(encoding)))
+ case ResponseAsByteArray => Try(res.body().bytes())
+ case ResponseAsStream() =>
+ Failure(new IllegalStateException("Streaming isn't supported"))
+ }
}
- }
}
class OkHttpSyncClientHandler private (client: OkHttpClient)