diff options
6 files changed, 13 insertions, 27 deletions
diff --git a/akka-http-handler/src/main/scala/com/softwaremill/sttp/akkahttp/AkkaHttpSttpHandler.scala b/akka-http-handler/src/main/scala/com/softwaremill/sttp/akkahttp/AkkaHttpSttpHandler.scala index ee9a88f..c096aa4 100644 --- a/akka-http-handler/src/main/scala/com/softwaremill/sttp/akkahttp/AkkaHttpSttpHandler.scala +++ b/akka-http-handler/src/main/scala/com/softwaremill/sttp/akkahttp/AkkaHttpSttpHandler.scala @@ -65,9 +65,6 @@ class AkkaHttpSttpHandler private (actorSystem: ActorSystem, .runFold(ByteString(""))(_ ++ _) .map(_.toArray[Byte]) - def asString(enc: String) = - asByteArray.map(new String(_, enc)) - rr match { case MappedResponseAs(raw, g) => bodyFromAkka(raw, hr).map(g) @@ -76,14 +73,11 @@ class AkkaHttpSttpHandler private (actorSystem: ActorSystem, Future.successful(()) case ResponseAsString(enc) => - asString(enc) + asByteArray.map(new String(_, enc)) case ResponseAsByteArray => asByteArray - case r @ ResponseAsParams(enc) => - asString(enc).map(r.parse) - case r @ ResponseAsStream() => Future.successful(r.responseIsStream(hr.entity.dataBytes)) } diff --git a/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala b/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala index cd10735..4824b39 100644 --- a/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala +++ b/async-http-client-handler/src/main/scala/com/softwaremill/sttp/asynchttpclient/AsyncHttpClientHandler.scala @@ -219,9 +219,6 @@ abstract class AsyncHttpClientHandler[R[_], S](asyncHttpClient: AsyncHttpClient, case ResponseAsByteArray => rm.unit(response.getResponseBodyAsBytes) - case r @ ResponseAsParams(enc) => - rm.unit(r.parse(asString(enc))) - case ResponseAsStream() => // only possible when the user requests the response as a stream of // Nothing. Oh well ... diff --git a/core/src/main/scala/com/softwaremill/sttp/HttpURLConnectionSttpHandler.scala b/core/src/main/scala/com/softwaremill/sttp/HttpURLConnectionSttpHandler.scala index fc9b420..6c3368a 100644 --- a/core/src/main/scala/com/softwaremill/sttp/HttpURLConnectionSttpHandler.scala +++ b/core/src/main/scala/com/softwaremill/sttp/HttpURLConnectionSttpHandler.scala @@ -129,9 +129,6 @@ object HttpURLConnectionSttpHandler extends SttpHandler[Id, Nothing] { os.toByteArray - case r @ ResponseAsParams(enc) => - r.parse(asString(enc)) - case ResponseAsStream() => // only possible when the user requests the response as a stream of // Nothing. Oh well ... diff --git a/core/src/main/scala/com/softwaremill/sttp/model/ResponseAs.scala b/core/src/main/scala/com/softwaremill/sttp/model/ResponseAs.scala index 4724292..cf9bc12 100644 --- a/core/src/main/scala/com/softwaremill/sttp/model/ResponseAs.scala +++ b/core/src/main/scala/com/softwaremill/sttp/model/ResponseAs.scala @@ -17,10 +17,17 @@ case object IgnoreResponse extends ResponseAs[Unit, Nothing] case class ResponseAsString(encoding: String) extends ResponseAs[String, Nothing] case object ResponseAsByteArray extends ResponseAs[Array[Byte], Nothing] -case class ResponseAsParams(encoding: String) - extends ResponseAs[Seq[(String, String)], Nothing] { +case class ResponseAsStream[T, S]()(implicit val responseIsStream: S =:= T) + extends ResponseAs[T, S] +case class MappedResponseAs[T, T2, S](raw: ResponseAs[T, S], g: T => T2) + extends ResponseAs[T2, S] { + override def map[T3](f: T2 => T3): ResponseAs[T3, S] = + MappedResponseAs[T, T3, S](raw, g andThen f) +} - private[sttp] def parse(s: String): Seq[(String, String)] = { +object ResponseAs { + private[sttp] def parseParams(s: String, + encoding: String): Seq[(String, String)] = { s.split("&") .toList .flatMap(kv => @@ -32,10 +39,3 @@ case class ResponseAsParams(encoding: String) }) } } -case class ResponseAsStream[T, S]()(implicit val responseIsStream: S =:= T) - extends ResponseAs[T, S] -case class MappedResponseAs[T, T2, S](raw: ResponseAs[T, S], g: T => T2) - extends ResponseAs[T2, S] { - override def map[T3](f: T2 => T3): ResponseAs[T3, S] = - MappedResponseAs[T, T3, S](raw, g andThen f) -} diff --git a/core/src/main/scala/com/softwaremill/sttp/package.scala b/core/src/main/scala/com/softwaremill/sttp/package.scala index c786720..daba574 100644 --- a/core/src/main/scala/com/softwaremill/sttp/package.scala +++ b/core/src/main/scala/com/softwaremill/sttp/package.scala @@ -84,7 +84,7 @@ package object sttp { def asParams: ResponseAs[Seq[(String, String)], Nothing] = asParams(Utf8) def asParams(encoding: String): ResponseAs[Seq[(String, String)], Nothing] = - ResponseAsParams(encoding) + asString(encoding).map(ResponseAs.parseParams(_, encoding)) def asStream[S]: ResponseAs[S, S] = ResponseAsStream[S, S]() 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 99f0770..75e372c 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 @@ -84,9 +84,7 @@ abstract class OkHttpClientHandler[R[_], S](client: OkHttpClient) res.body().source().readString(Charset.forName(encoding)) case ResponseAsByteArray => res.body().bytes() case MappedResponseAs(raw, g) => g(readResponseBody(res, raw)) - case r @ ResponseAsParams(enc) => - r.parse(res.body().source().readString(Charset.forName(enc))) - case ResponseAsStream() => throw new IllegalStateException() + case ResponseAsStream() => throw new IllegalStateException() } } } |