All Downloads are FREE. Search and download functionalities are using the official Maven repository.

me.archdev.foundationdb.clients.DatabaseClient.scala Maven / Gradle / Ivy

The newest version!
package me.archdev.foundationdb.clients

import java.util.concurrent.CompletableFuture

import cats.effect.IO
import com.apple.foundationdb.directory.DirectoryLayer
import com.apple.foundationdb.{ Database, Transaction }
import me.archdev.foundationdb.namespaces.Directory
import me.archdev.foundationdb._

import scala.collection.JavaConverters._
import scala.concurrent.ExecutionContext

class DatabaseClient(val db: Database) extends FoundationDBClient[DatabaseContext] {

  override val syntax: algebra.QueryAlgebra[DatabaseContext] = interpreters.DatabaseInterpreter

  override def close(): Unit = db.close()

  override def prepare[A](transaction: DatabaseContext[A])(implicit ec: ExecutionContext): IO[A] =
    javaFutureToIO(
      db.runAsync(
        javaClojure(materializeTransaction(_, transaction)),
        ExecutionContextExecutorServiceBridge(ec)
      )
    )

  private def materializeTransaction[A](tr: Transaction, queryPlan: DatabaseContext[A]): CompletableFuture[A] =
    queryPlan
      .run(tr)
      .thenApply(javaClojure(_._2))

  override def openDirectory(directoryPath: Seq[String]): IO[Directory] =
    javaFutureToIO(DirectoryLayer.getDefault.createOrOpen(db, directoryPath.asJava)).map(Directory.apply)

  override def openDirectory(directoryPath: Seq[String], layer: Array[Byte]): IO[Directory] =
    javaFutureToIO(DirectoryLayer.getDefault.createOrOpen(db, directoryPath.asJava, layer)).map(Directory.apply)

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy