From dabc405ab4b2d19a828ae94c8a93cb21467be2b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dejan=20Miji=C4=87?= Date: Fri, 31 Mar 2023 18:05:12 +0200 Subject: [PATCH] Use Chunk.foldLeft (#798) --- .../scala/zio/redis/SingleNodeExecutor.scala | 19 +++++++------------ .../scala/zio/redis/internal/RespValue.scala | 2 +- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala b/modules/redis/src/main/scala/zio/redis/SingleNodeExecutor.scala index 73760d1..36e9f7d 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 c40318e..586344c 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) } -- GitLab