From 19c3f4ac1a50917dafae9bd434c8169eaa158674 Mon Sep 17 00:00:00 2001 From: YisraelU Date: Tue, 20 Aug 2024 11:42:35 -0400 Subject: [PATCH] a few additional client commands --- .../redis4cats/algebra/connection.scala | 3 +++ .../dev/profunktor/redis4cats/redis.scala | 23 +++++++++++++++++++ .../profunktor/redis4cats/TestScenarios.scala | 9 ++++++++ 3 files changed, 35 insertions(+) diff --git a/modules/effects/src/main/scala/dev/profunktor/redis4cats/algebra/connection.scala b/modules/effects/src/main/scala/dev/profunktor/redis4cats/algebra/connection.scala index 1a9929ee..f54a9beb 100644 --- a/modules/effects/src/main/scala/dev/profunktor/redis4cats/algebra/connection.scala +++ b/modules/effects/src/main/scala/dev/profunktor/redis4cats/algebra/connection.scala @@ -32,4 +32,7 @@ trait Client[F[_], K] { def setClientName(name: K): F[Boolean] def getClientName(): F[Option[K]] def getClientId(): F[Long] + def getClientInfo: F[Map[String, String]] + def setLibName(name: String): F[Boolean] + def setLibVersion(version: String): F[Boolean] } diff --git a/modules/effects/src/main/scala/dev/profunktor/redis4cats/redis.scala b/modules/effects/src/main/scala/dev/profunktor/redis4cats/redis.scala index 8240f320..1549fd9a 100644 --- a/modules/effects/src/main/scala/dev/profunktor/redis4cats/redis.scala +++ b/modules/effects/src/main/scala/dev/profunktor/redis4cats/redis.scala @@ -1281,6 +1281,29 @@ private[redis4cats] class BaseRedis[F[_]: FutureLift: MonadThrow: Log, K, V]( override def getClientId(): F[Long] = async.flatMap(_.clientId().futureLift.map(Long.unbox)) + override def setLibName(name: String): F[Boolean] = + async.flatMap(_.clientSetinfo("LIB-NAME", name).futureLift.map(_ == "OK")) + + override def setLibVersion(version: String): F[Boolean] = + async.flatMap(_.clientSetinfo("LIB-VER", version).futureLift.map(_ == "OK")) + + override def getClientInfo: F[Map[String, String]] = + async.flatMap( + _.clientInfo().futureLift + .flatMap(parseClientInfo) + ) + + private def parseClientInfo(info: String): F[Map[String, String]] = + FutureLift[F].delay( + info + .replace("\n", "") + .split(" ") + .toList + .map(_.split("=", 2).toList) + .collect { case k :: v :: Nil => (k, v) } + .toMap + ) + /******************************* Server API **********************************/ override val flushAll: F[Unit] = async.flatMap(_.flushall().futureLift.void) diff --git a/modules/tests/src/test/scala/dev/profunktor/redis4cats/TestScenarios.scala b/modules/tests/src/test/scala/dev/profunktor/redis4cats/TestScenarios.scala index 45b64e94..041ce34e 100644 --- a/modules/tests/src/test/scala/dev/profunktor/redis4cats/TestScenarios.scala +++ b/modules/tests/src/test/scala/dev/profunktor/redis4cats/TestScenarios.scala @@ -501,6 +501,15 @@ trait TestScenarios { self: FunSuite => newClientName <- redis.getClientName() _ <- IO(assertEquals(newClientName, Some(clientName))) _ <- redis.getClientId() + info <- redis.getClientInfo + _ <- IO(assert(info.nonEmpty)) + success <- redis.setLibName("redis4cats") + _ <- IO(assert(success)) + success <- redis.setLibVersion("0.10.0") + _ <- IO(assert(success)) + info <- redis.getClientInfo + _ <- IO(assert(info.get("lib-name").contains("redis4cats"))) + _ <- IO(assert(info.get("lib-ver").contains("0.10.0"))) } yield () }