Skip to content

Commit e793de3

Browse files
committed
Armeria
1 parent aa8823b commit e793de3

File tree

5 files changed

+29
-8
lines changed

5 files changed

+29
-8
lines changed

armeria-backend/fs2/src/main/scala/sttp/client4/armeria/fs2/ArmeriaFs2Backend.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import sttp.capabilities.fs2.Fs2Streams
1212
import sttp.client4.armeria.ArmeriaWebClient.newClient
1313
import sttp.client4.armeria.{AbstractArmeriaBackend, BodyFromStreamMessage}
1414
import sttp.client4.impl.cats.CatsMonadAsyncError
15-
import sttp.client4.wrappers.FollowRedirectsBackend
1615
import sttp.client4.{wrappers, BackendOptions, StreamBackend}
1716
import sttp.monad.MonadAsyncError
17+
import sttp.client4.compression.Compressor
18+
import sttp.client4.impl.fs2.DeflateFs2Compressor
19+
import sttp.client4.impl.fs2.GZipFs2Compressor
1820

1921
private final class ArmeriaFs2Backend[F[_]: Async](client: WebClient, closeFactory: Boolean, dispatcher: Dispatcher[F])
2022
extends AbstractArmeriaBackend[F, Fs2Streams[F]](client, closeFactory, new CatsMonadAsyncError) {
@@ -41,6 +43,9 @@ private final class ArmeriaFs2Backend[F[_]: Async](client: WebClient, closeFacto
4143
},
4244
dispatcher
4345
)
46+
47+
override protected def compressors: List[Compressor[R]] =
48+
List(new GZipFs2Compressor[F, R](), new DeflateFs2Compressor[F, R]())
4449
}
4550

4651
object ArmeriaFs2Backend {

armeria-backend/src/main/scala/sttp/client4/armeria/AbstractArmeriaBackend.scala

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ import sttp.client4.internal.toByteArray
3939
import sttp.model._
4040
import sttp.monad.syntax._
4141
import sttp.monad.{Canceler, MonadAsyncError}
42+
import sttp.client4.compression.Compressor
43+
import sttp.client4.compression.GZipDefaultCompressor
44+
import sttp.client4.compression.DeflateDefaultCompressor
4245

4346
abstract class AbstractArmeriaBackend[F[_], S <: Streams[S]](
4447
client: WebClient = WebClient.of(),
@@ -54,6 +57,8 @@ abstract class AbstractArmeriaBackend[F[_], S <: Streams[S]](
5457

5558
protected def streamToPublisher(stream: streams.BinaryStream): Publisher[HttpData]
5659

60+
protected def compressors: List[Compressor[R]] = List(new GZipDefaultCompressor(), new DeflateDefaultCompressor())
61+
5762
override def send[T](request: GenericRequest[T, R]): F[Response[T]] =
5863
monad.suspend(adjustExceptions(request)(execute(request)))
5964

@@ -87,7 +92,7 @@ abstract class AbstractArmeriaBackend[F[_], S <: Streams[S]](
8792
} finally captor.close()
8893
}
8994

90-
private def requestToArmeria(request: GenericRequest[_, Nothing]): WebClientRequestPreparation = {
95+
private def requestToArmeria(request: GenericRequest[_, R]): WebClientRequestPreparation = {
9196
val requestPreparation = client
9297
.prepare()
9398
.disablePathParams()
@@ -102,19 +107,24 @@ abstract class AbstractArmeriaBackend[F[_], S <: Streams[S]](
102107
requestPreparation.responseTimeoutMillis(Long.MaxValue)
103108
}
104109

110+
val (body, contentLength) = Compressor.compressIfNeeded(request, compressors)
111+
105112
var customContentType: Option[ArmeriaMediaType] = None
106113
request.headers.foreach { header =>
107-
if (header.name.equalsIgnoreCase(HeaderNames.ContentType)) {
114+
if (header.is(HeaderNames.ContentType)) {
108115
// A Content-Type will be set with the body content
109116
customContentType = Some(ArmeriaMediaType.parse(header.value))
110-
} else {
111-
requestPreparation.header(header.name, header.value)
117+
} else if (!header.is(HeaderNames.ContentLength)) {
118+
val _ = requestPreparation.header(header.name, header.value)
112119
}
113120
}
121+
contentLength.foreach { cl =>
122+
requestPreparation.header(HeaderNames.ContentLength, cl.toString)
123+
}
114124

115125
val contentType = customContentType.getOrElse(ArmeriaMediaType.parse(request.body.defaultContentType.toString()))
116126

117-
request.body match {
127+
body match {
118128
case NoBody => requestPreparation
119129
case StringBody(s, encoding, _) =>
120130
val charset =

armeria-backend/zio/src/main/scala/sttp/client4/armeria/zio/ArmeriaZioBackend.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,12 @@ import sttp.capabilities.zio.ZioStreams
1313
import sttp.client4.armeria.ArmeriaWebClient.newClient
1414
import sttp.client4.armeria.{AbstractArmeriaBackend, BodyFromStreamMessage}
1515
import sttp.client4.impl.zio.RIOMonadAsyncError
16-
import sttp.client4.wrappers.FollowRedirectsBackend
1716
import sttp.client4.{wrappers, BackendOptions, StreamBackend}
1817
import sttp.monad.MonadAsyncError
1918
import zio.stream.Stream
19+
import sttp.client4.compression.Compressor
20+
import sttp.client4.impl.zio.GZipZioCompressor
21+
import sttp.client4.impl.zio.DeflateZioCompressor
2022

2123
private final class ArmeriaZioBackend(runtime: Runtime[Any], client: WebClient, closeFactory: Boolean)
2224
extends AbstractArmeriaBackend[Task, ZioStreams](client, closeFactory, new RIOMonadAsyncError[Any]) {
@@ -40,6 +42,9 @@ private final class ArmeriaZioBackend(runtime: Runtime[Any], client: WebClient,
4042
.run(stream.mapChunks(c => Chunk.single(HttpData.wrap(c.toArray))).toPublisher)
4143
.getOrThrowFiberFailure()
4244
}
45+
46+
override protected def compressors: List[Compressor[R]] =
47+
List(new GZipZioCompressor[R](), new DeflateZioCompressor[R]())
4348
}
4449

4550
object ArmeriaZioBackend {

effects/zio/src/main/scalajvm/sttp/client4/httpclient/zio/HttpClientZioBackend.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import java.util
2525
import java.util.concurrent.Flow.Publisher
2626
import java.{util => ju}
2727
import sttp.client4.compression.Compressor
28+
import sttp.client4.impl.zio.{DeflateZioCompressor, GZipZioCompressor}
2829

2930
class HttpClientZioBackend private (
3031
client: HttpClient,

effects/zio/src/main/scalajvm/sttp/client4/httpclient/zio/zioCompressor.scala renamed to effects/zio/src/main/scalajvm/sttp/client4/impl/zio/zioCompressor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package sttp.client4.httpclient.zio
1+
package sttp.client4.impl.zio
22

33
import sttp.client4._
44
import sttp.client4.compression.Compressor

0 commit comments

Comments
 (0)