diff --git a/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala b/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala index 73760d117b4b98008058f3d4a5279790c81fa285..36e9f7d855864c4110b818f5b44109d44832e03a 100644 --- a/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala +++ b/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala @@ -46,23 +46,18 @@ final class SingleNodeExecutor private ( private def drainWith(e: RedisError): UIO[Unit] = responses.takeAll.flatMap(ZIO.foreachDiscard(_)(_.fail(e))) private def send: IO[RedisError.IOError, Option[Unit]] = - requests.takeBetween(1, RequestQueueSize).flatMap { reqs => - val buffer = ChunkBuilder.make[Byte]() - val it = reqs.iterator - - while (it.hasNext) { - val req = it.next() - buffer ++= RespValue.Array(req.command).asBytes - } - - val bytes = buffer.result() + requests.takeBetween(1, RequestQueueSize).flatMap { requests => + val bytes = + requests + .foldLeft(ChunkBuilder.make[Byte]())((buffer, req) => buffer ++= RespValue.Array(req.command).asBytes) + .result() connection .write(bytes) .mapError(RedisError.IOError(_)) .tapBoth( - e => ZIO.foreachDiscard(reqs)(_.promise.fail(e)), - _ => ZIO.foreachDiscard(reqs)(req => responses.offer(req.promise)) + e => ZIO.foreachDiscard(requests)(_.promise.fail(e)), + _ => ZIO.foreachDiscard(requests)(req => responses.offer(req.promise)) ) } diff --git a/modules/redis/src/main/scala/zio/redis/internal/RespValue.scala b/modules/redis/src/main/scala/zio/redis/internal/RespValue.scala index c40318e4cd99eccedd5268dc95a520832c7c7000..586344c6208e70aad278698f4842332cb1c2b456 100644 --- a/modules/redis/src/main/scala/zio/redis/internal/RespValue.scala +++ b/modules/redis/src/main/scala/zio/redis/internal/RespValue.scala @@ -39,7 +39,7 @@ private[redis] sealed trait RespValue extends Product with Serializable { self = Headers.BulkString +: (encode(bytes.length.toString) ++ bytes ++ CrLf) case Array(elements) => - val data = elements.foldLeft[Chunk[Byte]](Chunk.empty)(_ ++ _.asBytes) + val data = elements.foldLeft(Chunk.empty[Byte])(_ ++ _.asBytes) Headers.Array +: (encode(elements.size.toString) ++ data) }