@@ -35,7 +35,7 @@ trait MessageCodec[F[_]] {
35
35
36
36
}
37
37
38
- class JsonMessageCodec [F [_] : Sync : Compression ]( printer : Printer ) extends MessageCodec [F ] {
38
+ class JsonMessageCodec [F [_] : Sync ]( compressor : Compressor [ F ], printer : Printer ) extends MessageCodec [F ] {
39
39
40
40
private val logger : Logger = LoggerFactory .getLogger(getClass)
41
41
@@ -47,7 +47,7 @@ class JsonMessageCodec[F[_] : Sync : Compression](printer: Printer) extends Mess
47
47
case str : String =>
48
48
Sync [F ].delay(URLDecoder .decode(str, charset))
49
49
case stream : Stream [F , Byte ] =>
50
- decompressed(entity.encoding, stream)
50
+ compressor. decompressed(entity.encoding, stream)
51
51
.through(decodeWithCharset(charset))
52
52
.compile.string
53
53
}
@@ -82,7 +82,7 @@ class JsonMessageCodec[F[_] : Sync : Compression](printer: Printer) extends Mess
82
82
83
83
}
84
84
85
- class ProtoMessageCodec [F [_] : Async : Compression ] extends MessageCodec [F ] {
85
+ class ProtoMessageCodec [F [_] : Async ]( compressor : Compressor [ F ]) extends MessageCodec [F ] {
86
86
87
87
private val logger : Logger = LoggerFactory .getLogger(getClass)
88
88
@@ -96,7 +96,7 @@ class ProtoMessageCodec[F[_] : Async : Compression] extends MessageCodec[F] {
96
96
Async [F ].delay(base64dec.decode(str.getBytes(entity.charset.nioCharset)))
97
97
.flatMap(arr => Async [F ].delay(cmp.parseFrom(arr)))
98
98
case stream : Stream [F , Byte ] =>
99
- toInputStreamResource(decompressed(entity.encoding, stream))
99
+ toInputStreamResource(compressor. decompressed(entity.encoding, stream))
100
100
.use(is => Async [F ].delay(cmp.parseFrom(is)))
101
101
}
102
102
@@ -129,11 +129,16 @@ class ProtoMessageCodec[F[_] : Async : Compression] extends MessageCodec[F] {
129
129
130
130
}
131
131
132
- def decompressed [F [_] : Compression ](encoding : Option [ContentCoding ], body : Stream [F , Byte ]): Stream [F , Byte ] = {
133
- body.through(encoding match {
134
- case Some (ContentCoding .gzip) =>
135
- Compression [F ].gunzip().andThen(_.flatMap(_.content))
136
- case _ =>
137
- identity
138
- })
139
- }
132
+ class Compressor [F [_]: Sync ] {
133
+
134
+ given Compression [F ] = Compression .forSync[F ]
135
+
136
+ def decompressed (encoding : Option [ContentCoding ], body : Stream [F , Byte ]): Stream [F , Byte ] =
137
+ body.through(encoding match {
138
+ case Some (ContentCoding .gzip) =>
139
+ Compression [F ].gunzip().andThen(_.flatMap(_.content))
140
+ case _ =>
141
+ identity
142
+ })
143
+
144
+ }
0 commit comments