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

zio.stream.ZStreamVersionSpecific.scala Maven / Gradle / Ivy

There is a newer version: 2.1.13
Show newest version
package zio.stream

import zio.ZLayer
import zio.internal.macros.LayerMacros

trait ZStreamVersionSpecific[-R, +E, +O] { self: ZStream[R, E, O] =>

  /**
   * Automatically assembles a layer for the ZStream effect,
   * which translates it to another level.
   */
  inline def provide[E1 >: E](inline layer: ZLayer[_,E1,_]*): ZStream[Any, E1, O] =
    ${ZStreamProvideMacro.provideImpl[Any, R, E1, O]('self, 'layer)}

}

object ZStreamProvideMacro {
  import scala.quoted._

  def provideImpl[R0: Type, R: Type, E: Type, A: Type](zstream: Expr[ZStream[R,E,A]], layer: Expr[Seq[ZLayer[_,E,_]]])(using Quotes): Expr[ZStream[R0,E,A]] = {
    val layerExpr = LayerMacros.constructLayer[R0, R, E](layer)
    '{$zstream.provideLayer($layerExpr.asInstanceOf[ZLayer[R0,E,R]])}
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy