From 3aefd7447ae8f15ecd9a3401b9dd6992c4197aec Mon Sep 17 00:00:00 2001 From: adamw Date: Tue, 4 Jul 2017 14:01:16 +0200 Subject: Stream type is nothing when the response doesn't support streaming --- .../sttp/HttpConnectionSttpHandler.scala | 6 ++--- .../scala/com/softwaremill/sttp/SttpHandler.scala | 31 ++-------------------- .../com/softwaremill/sttp/model/package.scala | 10 +++---- .../main/scala/com/softwaremill/sttp/package.scala | 10 +++---- 4 files changed, 15 insertions(+), 42 deletions(-) (limited to 'core') diff --git a/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala b/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala index f7292d7..1ca2f77 100644 --- a/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala +++ b/core/src/main/scala/com/softwaremill/sttp/HttpConnectionSttpHandler.scala @@ -10,8 +10,8 @@ import com.softwaremill.sttp.model._ import scala.annotation.tailrec import scala.io.Source -object HttpConnectionSttpHandler extends SttpHandler[Id, Any, ResponseAsBasic] { - override def send[T](r: Request, responseAs: ResponseAsBasic[T, Any]): Response[T] = { +object HttpConnectionSttpHandler extends SttpHandler[Id, Nothing, ResponseAsBasic] { + override def send[T](r: Request, responseAs: ResponseAsBasic[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) } @@ -68,7 +68,7 @@ object HttpConnectionSttpHandler extends SttpHandler[Id, Any, ResponseAsBasic] { } } - private def readResponse[T](is: InputStream, responseAs: ResponseAsBasic[T, Any]): T = responseAs match { + private def readResponse[T](is: InputStream, responseAs: ResponseAsBasic[T, Nothing]): T = responseAs match { case IgnoreResponse => @tailrec def consume(): Unit = if (is.read() != -1) consume() consume() diff --git a/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala b/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala index 50ccd35..500e889 100644 --- a/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala +++ b/core/src/main/scala/com/softwaremill/sttp/SttpHandler.scala @@ -1,36 +1,9 @@ package com.softwaremill.sttp -import com.softwaremill.sttp.model.{ResponseAs, ResponseAsStream} +import com.softwaremill.sttp.model.ResponseAs import scala.language.higherKinds -trait SttpHandler[R[_], +S, -AcceptsResponseAs[x, -s] <: ResponseAs[x, s]] { +trait SttpHandler[R[_], -S, -AcceptsResponseAs[x, +s] <: ResponseAs[x, s]] { def send[T](request: Request, responseAs: AcceptsResponseAs[T, S]): R[Response[T]] } - -//trait SttpStreamHandler[R[_], S] extends SttpHandler[R] { -// def send(request: Request, responseAsStream: ResponseAsStream[S]): R[Response[S]] -//} - - -/* - -Cat <: Animal -Dog <: Animal - -x: Animal := Cat - -Contravariant: -def eat(x: Cat) := def eat(x: Animal) -Animal => Cat := Animal => Unit - -Covariant: -def create: Animal := def create: Cat -Unit => Animal := Unit => Cat - ---- - -RA >: RAS -Handler[RAS] >: Handler[RA] - - */ \ No newline at end of file diff --git a/core/src/main/scala/com/softwaremill/sttp/model/package.scala b/core/src/main/scala/com/softwaremill/sttp/model/package.scala index 3c0e563..24c5fa6 100644 --- a/core/src/main/scala/com/softwaremill/sttp/model/package.scala +++ b/core/src/main/scala/com/softwaremill/sttp/model/package.scala @@ -38,12 +38,12 @@ package object model { case class FileBody(f: File) extends BasicRequestBody case class PathBody(f: Path) extends BasicRequestBody - sealed trait ResponseAs[T, -S] + sealed trait ResponseAs[T, +S] - sealed trait ResponseAsBasic[T, -S <: Any] extends ResponseAs[T, S] - object IgnoreResponse extends ResponseAsBasic[Unit, Any] - case class ResponseAsString(encoding: String) extends ResponseAsBasic[String, Any] - object ResponseAsByteArray extends ResponseAsBasic[Array[Byte], Any] + sealed trait ResponseAsBasic[T, +S] extends ResponseAs[T, S] + object IgnoreResponse extends ResponseAsBasic[Unit, Nothing] + case class ResponseAsString(encoding: String) extends ResponseAsBasic[String, Nothing] + object ResponseAsByteArray extends ResponseAsBasic[Array[Byte], Nothing] // response as params case class ResponseAsStream[T, S]()(implicit val x: S =:= T) extends ResponseAs[T, S] diff --git a/core/src/main/scala/com/softwaremill/sttp/package.scala b/core/src/main/scala/com/softwaremill/sttp/package.scala index e4f5311..8abea0a 100644 --- a/core/src/main/scala/com/softwaremill/sttp/package.scala +++ b/core/src/main/scala/com/softwaremill/sttp/package.scala @@ -15,13 +15,13 @@ package object sttp { type Id[X] = X type Empty[X] = None.type - def ignoreResponse: ResponseAsBasic[Unit, Any] = IgnoreResponse + def ignoreResponse: ResponseAsBasic[Unit, Nothing] = IgnoreResponse /** * Uses `utf-8` encoding. */ - def responseAsString: ResponseAsBasic[String, Any] = responseAsString(Utf8) - def responseAsString(encoding: String): ResponseAsBasic[String, Any] = ResponseAsString(encoding) - def responseAsByteArray: ResponseAsBasic[Array[Byte], Any] = ResponseAsByteArray + def responseAsString: ResponseAsBasic[String, Nothing] = responseAsString(Utf8) + def responseAsString(encoding: String): ResponseAsBasic[String, Nothing] = ResponseAsString(encoding) + def responseAsByteArray: ResponseAsBasic[Array[Byte], Nothing] = ResponseAsByteArray def responseAsStream[S]: ResponseAs[S, S] = ResponseAsStream[S, S]() /** @@ -150,7 +150,7 @@ package object sttp { * to consume it. An exception to this are streaming responses, which need to fully consumed * by the client if such a response type is requested. */ - def send[R[_], S, T, ResponseAsType[x, -s] <: ResponseAs[x, s]](responseAs: ResponseAsType[T, S])( + def send[R[_], S, T, ResponseAsType[x, s] <: ResponseAs[x, s]](responseAs: ResponseAsType[T, S])( implicit handler: SttpHandler[R, S, ResponseAsType], isRequest: IsRequest[U]): R[Response[T]] = { handler.send(this, responseAs) } -- cgit v1.2.3