Skip to content

Instantly share code, notes, and snippets.

@otobrglez
Created July 23, 2025 09:31
Show Gist options
  • Save otobrglez/48e72e7d5fea1db4a9b30ac3c112df4a to your computer and use it in GitHub Desktop.
Save otobrglez/48e72e7d5fea1db4a9b30ac3c112df4a to your computer and use it in GitHub Desktop.
Hazelcast client wrapper for Scala with ZIO
import com.hazelcast.client.HazelcastClient
import com.hazelcast.client.config.ClientConfig
import com.hazelcast.core.HazelcastInstance
import com.hazelcast.map.IMap
import zio.*
import scala.reflect.ClassTag
final class Hazelcast private (private val client: HazelcastInstance):
def getMap[K: ClassTag, V: ClassTag](name: String): IMap[K, V] = client.getMap[K, V](name)
def getMapZIO[K: ClassTag, V: ClassTag](name: String): Task[IMap[K, V]] = ZIO.attempt(client.getMap[K, V](name))
object Hazelcast:
def configLayer(clientConfig: ClientConfig): ULayer[ClientConfig] =
ZLayer.succeed(clientConfig)
def getMap[K: ClassTag, V: ClassTag](name: String): ZIO[Hazelcast, Nothing, IMap[K, V]] =
ZIO.serviceWith[Hazelcast](_.getMap[K, V](name))
def getMapZIO[K: ClassTag, V: ClassTag](name: String): RIO[Hazelcast, IMap[K, V]] =
ZIO.serviceWithZIO[Hazelcast](_.getMapZIO[K, V](name))
def live = ZLayer.scoped:
for
_ <- ZIO.unit
config <- ZIO.service[ClientConfig]
client = HazelcastClient.newHazelcastClient(config)
yield new Hazelcast(client)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment