Q: How to use with ZIO?

A: For use with ZIO, use zio-interop-cats.

libraryDependencies += "dev.zio" %% "zio-interop-cats" % "<latest-version>"

The following is sample code for using ldbc with ZIO.

import java.util.UUID

import cats.effect.std.UUIDGen

import fs2.hashing.Hashing
import fs2.io.net.Network

import zio.*
import zio.interop.catz.*

object Main extends ZIOAppDefault:

  given cats.effect.std.Console[Task] = cats.effect.std.Console.make[Task]
  given UUIDGen[Task] with
    override def randomUUID: Task[UUID] = ZIO.attempt(UUID.randomUUID())
  given Hashing[Task] = Hashing.forSync[Task]
  given Network[Task] = Network.forAsync[Task]

  private def provider =
    ConnectionProvider
      .default[Task]("127.0.0.1", 13306, "ldbc", "password", "world")
      .setSSL(SSL.Trusted)

  override def run =
    provider.use { conn =>
      sql"SELECT Name FROM city"
        .query[String]
        .to[List]
        .readOnly(conn)
        .flatMap { cities =>
          Console.printLine(cities)
        }
    }

パフォーマンス

Performance results from the Cats Effect to ZIO conversion are shown below.

Select Benchmark for Effect System