aboutsummaryrefslogtreecommitdiff
path: root/async-http-client-handler/scalaz/src/main
diff options
context:
space:
mode:
authoradamw <adam@warski.org>2017-07-24 12:18:27 +0200
committeradamw <adam@warski.org>2017-07-24 12:18:27 +0200
commitccd2c4b1d53bf68e04ff1f8bca032d870494d9a8 (patch)
treee298b14664b07dc9aab54f74abe956fb797fe1bb /async-http-client-handler/scalaz/src/main
parentfef16dd2dbd0f53ee7432ab2ff39255279932ac4 (diff)
downloadsttp-ccd2c4b1d53bf68e04ff1f8bca032d870494d9a8.tar.gz
sttp-ccd2c4b1d53bf68e04ff1f8bca032d870494d9a8.tar.bz2
sttp-ccd2c4b1d53bf68e04ff1f8bca032d870494d9a8.zip
Better responseAs mapping, done on the client thread pool
Diffstat (limited to 'async-http-client-handler/scalaz/src/main')
-rw-r--r--async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/ScalazAsyncHttpClientHandler.scala17
1 files changed, 13 insertions, 4 deletions
diff --git a/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/ScalazAsyncHttpClientHandler.scala b/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/ScalazAsyncHttpClientHandler.scala
index ab2e261..57d65c6 100644
--- a/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/ScalazAsyncHttpClientHandler.scala
+++ b/async-http-client-handler/scalaz/src/main/scala/com/softwaremill/sttp/asynchttpclient/scalaz/ScalazAsyncHttpClientHandler.scala
@@ -2,7 +2,7 @@ package com.softwaremill.sttp.asynchttpclient.scalaz
import com.softwaremill.sttp.asynchttpclient.{
AsyncHttpClientHandler,
- WrapperFromAsync
+ MonadAsyncError
}
import org.asynchttpclient.{
AsyncHttpClient,
@@ -14,14 +14,21 @@ import scalaz.{-\/, \/-}
import scalaz.concurrent.Task
class ScalazAsyncHttpClientHandler(asyncHttpClient: AsyncHttpClient)
- extends AsyncHttpClientHandler[Task](asyncHttpClient, TaskFromAsync) {
+ extends AsyncHttpClientHandler[Task](asyncHttpClient, TaskMonad) {
def this() = this(new DefaultAsyncHttpClient())
def this(cfg: AsyncHttpClientConfig) = this(new DefaultAsyncHttpClient(cfg))
}
-private[asynchttpclient] object TaskFromAsync extends WrapperFromAsync[Task] {
- override def apply[T](
+private[scalaz] object TaskMonad extends MonadAsyncError[Task] {
+ override def unit[T](t: T): Task[T] = Task.point(t)
+
+ override def map[T, T2](fa: Task[T], f: (T) => T2): Task[T2] = fa.map(f)
+
+ override def flatMap[T, T2](fa: Task[T], f: (T) => Task[T2]): Task[T2] =
+ fa.flatMap(f)
+
+ override def async[T](
register: ((Either[Throwable, T]) => Unit) => Unit): Task[T] =
Task.async { cb =>
register {
@@ -29,4 +36,6 @@ private[asynchttpclient] object TaskFromAsync extends WrapperFromAsync[Task] {
case Right(t) => cb(\/-(t))
}
}
+
+ override def error[T](t: Throwable): Task[T] = Task.fail(t)
}