Skip to content

Commit b2a981e

Browse files
committed
Rename option to auto-decompress
1 parent 30a5c2b commit b2a981e

File tree

8 files changed

+29
-15
lines changed

8 files changed

+29
-15
lines changed

core/src/main/scala/sttp/client4/RequestOptions.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ case class RequestOptions(
1010
readTimeout: Duration,
1111
maxRedirects: Int,
1212
redirectToGet: Boolean,
13-
disableAutoDecompression: Boolean,
13+
decompressResponseBody: Boolean,
14+
compressRequestBody: Option[String],
1415
httpVersion: Option[HttpVersion],
1516
loggingOptions: LoggingOptions
1617
)

core/src/main/scala/sttp/client4/SttpApi.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ trait SttpApi extends SttpExtensions with UriInterpolator {
3131
DefaultReadTimeout,
3232
FollowRedirectsBackend.MaxRedirects,
3333
redirectToGet = false,
34-
disableAutoDecompression = false,
34+
decompressResponseBody = true,
35+
compressRequestBody = None,
3536
httpVersion = None,
3637
loggingOptions = LoggingOptions()
3738
),

core/src/main/scala/sttp/client4/internal/BodyFromResponseAs.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ abstract class BodyFromResponseAs[F[_], RegularResponse, WSResponse, Stream](imp
2626
m.eval(g(result, meta)).map((_, replayableBody))
2727
}
2828

29-
case (rfm: ResponseAsFromMetadata[T, _], _) => doApply(rfm(meta), meta, response)
29+
case (rfm: ResponseAsFromMetadata[T, _] @unchecked, _) => doApply(rfm(meta), meta, response)
3030

3131
case (ResponseAsBoth(l, r), _) =>
3232
doApply(l, meta, response).flatMap {

core/src/main/scala/sttp/client4/requestBuilder.scala

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -301,15 +301,27 @@ trait PartialRequestBuilder[+PR <: PartialRequestBuilder[PR, R], +R]
301301
*/
302302
def redirectToGet(r: Boolean): PR = withOptions(options.copy(redirectToGet = r))
303303

304-
/** Disables auto-decompression of response bodies which are received with supported `Content-Encoding headers. */
305-
def disableAutoDecompression: PR = withOptions(options.copy(disableAutoDecompression = true))
304+
/** Disables auto-decompression of response bodies which are received with supported `Content-Encoding` headers. */
305+
def disableAutoDecompression: PR = withOptions(options.copy(decompressResponseBody = false))
306306

307-
/** True iff auto-decompression is disabled.
307+
/** True iff auto-decompression is enabled (which is the default).
308308
*
309309
* @see
310310
* disableAutoDecompression
311311
*/
312-
def autoDecompressionDisabled: Boolean = options.disableAutoDecompression
312+
def autoDecompressionEnabled: Boolean = options.decompressResponseBody
313+
314+
/** Compress the request body with the given encoding.
315+
*
316+
* The backend must support the encoding, otherwise an exception is thrown / a failed effect is returned. All
317+
* backends support the [[sttp.model.Encodings.Gzip]] and [[sttp.model.Encodings.Deflate]] encodings.
318+
*
319+
* Note that the server might not support compressed bodies. By default request bodies are not compressed.
320+
*
321+
* @see
322+
* [[sttp.model.Encodings]]
323+
*/
324+
def compressBody(encoding: String): PR = withOptions(options.copy(compressRequestBody = Some(encoding)))
313325

314326
/** Set the HTTP version with which this request should be sent. Supported only in a few backends. */
315327
def httpVersion(version: HttpVersion): PR = withOptions(options.copy(httpVersion = Some(version)))

core/src/main/scalajvm/sttp/client4/httpurlconnection/HttpURLConnectionBackend.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ class HttpURLConnectionBackend private (
250250

251251
val code = StatusCode(c.getResponseCode)
252252
val wrappedIs =
253-
if (c.getRequestMethod != "HEAD" && !code.equals(StatusCode.NoContent) && !request.autoDecompressionDisabled) {
253+
if (c.getRequestMethod != "HEAD" && !code.equals(StatusCode.NoContent) && request.autoDecompressionEnabled) {
254254
wrapInput(contentEncoding, handleNullInput(is))
255255
} else handleNullInput(is)
256256
val responseMetadata = ResponseMetadata(code, c.getResponseMessage, headers)

http4s-backend/src/main/scala/sttp/client4/http4s/Http4sBackend.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ class Http4sBackend[F[_]: Async](
7474
responseMetadata,
7575
Left(
7676
onFinalizeSignal(
77-
decompressResponseBodyIfNotHead(r.method, response, r.autoDecompressionDisabled),
77+
decompressResponseBodyIfNotHead(r.method, response, r.autoDecompressionEnabled),
7878
signalBodyComplete
7979
)
8080
)
@@ -178,9 +178,9 @@ class Http4sBackend[F[_]: Async](
178178
private def decompressResponseBodyIfNotHead[T](
179179
m: Method,
180180
hr: http4s.Response[F],
181-
disableAutoDecompression: Boolean
181+
enableAutoDecompression: Boolean
182182
): http4s.Response[F] =
183-
if (m == Method.HEAD || disableAutoDecompression) hr else decompressResponseBody(hr)
183+
if (m == Method.HEAD || !enableAutoDecompression) hr else decompressResponseBody(hr)
184184

185185
private def decompressResponseBody(hr: http4s.Response[F]): http4s.Response[F] = {
186186
val body = hr.headers

okhttp-backend/src/main/scala/sttp/client4/okhttp/OkHttpBackend.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ abstract class OkHttpBackend[F[_], S <: Streams[S], P](
8585
if (
8686
method != Method.HEAD && !res
8787
.code()
88-
.equals(StatusCode.NoContent.code) && !request.autoDecompressionDisabled
88+
.equals(StatusCode.NoContent.code) && request.autoDecompressionEnabled
8989
) {
9090
encoding
9191
.filterNot(_.isEmpty)

pekko-http-backend/src/main/scala/sttp/client4/pekkohttp/PekkoHttpBackend.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,15 +134,15 @@ class PekkoHttpBackend private (
134134
val body = bodyFromPekko(
135135
r.response,
136136
responseMetadata,
137-
wsFlow.map(Right(_)).getOrElse(Left(decodePekkoResponse(hr, r.autoDecompressionDisabled)))
137+
wsFlow.map(Right(_)).getOrElse(Left(decodePekkoResponse(hr, r.autoDecompressionEnabled)))
138138
)
139139

140140
body.map(client4.Response(_, code, statusText, headers, Nil, r.onlyMetadata))
141141
}
142142

143143
// http://doc.akka.io/docs/akka-http/10.0.7/scala/http/common/de-coding.html
144-
private def decodePekkoResponse(response: HttpResponse, disableAutoDecompression: Boolean): HttpResponse =
145-
if (!response.status.allowsEntity() || disableAutoDecompression) response
144+
private def decodePekkoResponse(response: HttpResponse, enableAutoDecompression: Boolean): HttpResponse =
145+
if (!response.status.allowsEntity() || !enableAutoDecompression) response
146146
else customEncodingHandler.orElse(EncodingHandler(standardEncoding)).apply(response -> response.encoding)
147147

148148
private def standardEncoding: (HttpResponse, HttpEncoding) => HttpResponse = {

0 commit comments

Comments
 (0)