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

turbolift.io.ResourceFactory.scala Maven / Gradle / Ivy

The newest version!
package turbolift.io
import java.io.{Closeable => JCloseable}
import turbolift.!!
import turbolift.effects.{IO, Finalizer}


/** To be used with [[turbolift.effects.FinalizerEffect FinalizerEffect]]. */
trait ResourceFactory[A, U]:
  def acquire: A !! U
  def release(value: A): Unit !! U


object ResourceFactory:
  def apply[A, U](acquire: A !! U, release: A => Unit !! U): ResourceFactory[A, U] =
    val acq = acquire
    val rel = release
    new ResourceFactory[A, U]:
      override def acquire = acq
      override def release(a: A) = rel(a)

  extension [A](thiz: ResourceFactory[A, IO])
    def use: A !! Finalizer = Finalizer.use(thiz)

  trait Closeable[A <: JCloseable] extends ResourceFactory[A, IO]:
    final override def release(a: A): Unit !! IO = IO(a.close)




© 2015 - 2024 Weber Informatics LLC | Privacy Policy