Derive

zio.ZLayer.Derive
object Derive

Attributes

Graph
Supertypes
class Object
trait Matchable
class Any
Self type
Derive.type

Members list

Type members

Classlikes

trait AcquireRelease[-R, +E, A] extends Scoped[R, E]

A special form of Scoped for convenience.

A special form of Scoped for convenience.

When using ZLayer.derive with a type that implements AcquireRelease, the provided acquire and release methods will be automatically utilized as the lifecycle hooks.

Attributes

Note

This trait's lifecycle hooks are specifically designed to work with ZLayer.derive. Using it outside this context won't inherently attach any lifecycle behaviors to the type.

Supertypes
trait Scoped[R, E]
class Object
trait Matchable
class Any
object Default

Attributes

Companion
trait
Supertypes
class Object
trait Matchable
class Any
Self type
Default.type
trait Default[+A]

Provides a default way to construct or provide an instance of type A.

Provides a default way to construct or provide an instance of type A.

Used during ZLayer derivation to resolve dependencies. If an implicit ZLayer.Derive.Default[A] instance exists for a type, it signifies that a default value can be used, bypassing the dependency in the ZLayer environment.

Attributes

Note

When type-annotating the implicit val, ensure it's in the form Default.WithContext[R, E, A] rather than just Default[A] to ensure correct type inference and dependency resolution during ZLayer derivation.

Companion
object
Supertypes
class Object
trait Matchable
class Any
trait Scoped[-R, +E]

Defines a resourceful effect that will be attached to the lifetime of the ZLayer derived by ZLayer.derive.

Defines a resourceful effect that will be attached to the lifetime of the ZLayer derived by ZLayer.derive.

The 'resourceful' effect might be a background task, a lock file, or etc., that can be managed by Scope.

If scoped fails during resource acquisition, the entire ZLayer initialization process fails.

Attributes

Note

This trait is specifically designed to work with ZLayer.derive. Using it outside this context won't inherently attach any resourceful behaviors to the type.

class ThirdPartyService(connection: Connection) extends ZLayer.Derive.Scoped[Any, Nothing] {
 // Repeats health check every 10 seconds in background during the layer's lifetime
 override def scoped(implicit trace: Trace): ZIO[Scope, Nothing, Any] =
   connection.healthCheck
     .ignoreLogged
     .repeat(Schedule.spaced(10.seconds))
     .forkScoped
}
object ThirdPartyService {
 // `ZLayer.Derive.Scoped` should be used with `ZLayer.derive`
 val layer = ZLayer.derive[ThirdPartyService]
}
Supertypes
class Object
trait Matchable
class Any
Known subtypes
trait AcquireRelease[R, E, A]