Skip to content

Instantly share code, notes, and snippets.

@rleibman
Created June 26, 2019 16:48
Show Gist options
  • Select an option

  • Save rleibman/e0b541852013a7c8b03179d33e5e6dfa to your computer and use it in GitHub Desktop.

Select an option

Save rleibman/e0b541852013a7c8b03179d33e5e6dfa to your computer and use it in GitHub Desktop.

Revisions

  1. rleibman renamed this gist Jun 26, 2019. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  2. rleibman created this gist Jun 26, 2019.
    39 changes: 39 additions & 0 deletions SlickZIOSPec
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    package slickzio

    import org.scalatest.{FlatSpec, Matchers}
    import slick.basic.BasicBackend
    import slick.dbio.DBIO
    import slick.jdbc.{H2Profile, JdbcProfile}
    import zio.internal.PlatformLive
    import zio.{Runtime, ZIO}

    class SlickZioSpec extends FlatSpec with Matchers {
    implicit val profile: JdbcProfile = H2Profile

    val action: DBIO[Int] = {
    import profile.api._
    sql"select 1".as[Int].head
    }

    type SlickZIO[T] = ZIO[BasicBackend#DatabaseDef, Throwable, T]

    object SlickZIO {
    def apply[T](action: DBIO[T]): SlickZIO[T] = {
    for {
    db <- ZIO.environment[BasicBackend#DatabaseDef]
    res <- ZIO.fromFuture(implicit executionContext => db.run(action))
    } yield res
    }
    }

    implicit def DBIO2SlickZIO[T](dbio: DBIO[T]): SlickZIO[T] = SlickZIO(dbio)

    "all manual: simple select using zio" should "also work" in {
    import profile.api._

    val dbRuntime =
    Runtime(Database.forDriver(org.h2.Driver.load(), "jdbc:h2:mem:"),
    PlatformLive.Default)
    dbRuntime.unsafeRun(action) shouldBe 1
    }
    }