class ZIOSupportModule[R] extends ZIOPlatformDependentSupportModule[R]
zio.ZIO
effect type support for distage
resources, effects, roles & tests
- Adds izumi.functional.quasi.QuasiIO instances to support using ZIO in
Injector
,distage-framework
&distage-testkit-scalatest
- Adds izumi.functional.bio typeclass instances for ZIO
Will also add the following components:
ExecutionContext @Id("cpu")
for CPU-bound tasks (will be used for all tasks by default by zio.Runtime)ExecutionContext @Id("io")
for blocking IO tasks (tasks can be scheduled to it via izumi.functional.bio.BlockingIO2 or zio.ZIO.blocking)
Added into scope by izumi.distage.modules.DefaultModule.
If interop-cats library is on the classpath during compilation,
implicit izumi.distage.modules.DefaultModule.forZIOPlusCats will be picked up instead of izumi.distage.modules.DefaultModule.forZIO
and will add a module with cats-effect
instances izumi.distage.modules.typeclass.ZIOCatsEffectInstancesModule
Bindings to the same keys in your own izumi.distage.model.definition.ModuleDef or plugins will override these defaults.
- Alphabetic
- By Inheritance
- ZIOSupportModule
- ZIOPlatformDependentSupportModule
- ModuleDef
- ModuleDefDSL
- TagsDSL
- IncludesDSL
- AbstractBindingDefDSL
- AbstractBindingDefDSLMacro
- Module
- ModuleBase
- CachedHashcode
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new ZIOSupportModule()(implicit arg0: Tag[R])
Type Members
- final class MutationContext extends AnyRef
Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.
Use this to create utility functions that add bindings mutably to the current module, as opposed to creating new modules and including them.
Example:
import distage.{ClassConstructor, Tag, ModuleDef} import izumi.distage.model.definition.dsl.ModuleDefDSL trait RegisteredComponent class RegisteredComponentImpl extends RegisteredComponent def addAndRegister[T <: RegisteredComponent: Tag: ClassConstructor](implicit mutateModule: ModuleDefDSL#MutationContext): Unit = { new mutateModule.dsl { make[T] many[RegisteredComponent] .weak[T] } } new ModuleDef { addAndRegister[RegisteredComponentImpl] }
- Definition Classes
- AbstractBindingDefDSL
Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def _initialIncludes: ArrayBuffer[Include]
- Attributes
- protected
- Definition Classes
- IncludesDSL
- def _initialState: ArrayBuffer[BindingRef]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- def _initialTags: Set[BindingTag]
- Attributes
- protected
- Definition Classes
- TagsDSL
- final def _make[T](provider: Functoid[T])(implicit arg0: Tag[T], pos: CodePositionMaterializer): MakeDSL[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- def _registered[T <: BindingRef](bindingRef: T): T
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- final def addImplicit[T](implicit arg0: Tag[T], instance: T, pos: CodePositionMaterializer): MakeDSLUnnamedAfterFrom[T]
Same as
make[T].from(implicitly[T])
*Same as
make[T].from(implicitly[T])
*- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- final def bindings: Set[Binding]
- Definition Classes
- ModuleDefDSL
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def equals(obj: Any): Boolean
- Definition Classes
- ModuleBase → AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- final def hash: Int
- Attributes
- protected
- Definition Classes
- ModuleBase → CachedHashcode
- final lazy val hashCode: Int
- Definition Classes
- CachedHashcode → AnyRef → Any
- final def include(that: ModuleBase, tagMergeStrategy: TagMergePolicy = TagMergePolicy.MergePreferInner): Unit
Add all bindings in
that
module intothis
moduleAdd all bindings in
that
module intothis
moduleWON'T add global tags from TagsDSL#tag to included bindings.
- Attributes
- protected
- Definition Classes
- IncludesDSL
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def iterator: Iterator[Binding]
- Definition Classes
- ModuleDefDSL
- final def keys: Set[DIKey]
- Definition Classes
- ModuleBase
- final def keysIterator: Iterator[DIKey]
- Definition Classes
- ModuleDefDSL
- final macro def make[T]: MakeDSL[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSLMacro
- final def makeFactory[T](implicit arg0: Tag[T], arg1: FactoryConstructor[T]): MakeDSLUnnamedAfterFrom[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- See also
- final def makeSubcontext[T](implicit arg0: Tag[T]): SubcontextDSL[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- See also
- final def makeSubcontext[T](submodule: ModuleBase)(implicit arg0: Tag[T]): SubcontextDSL[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- See also
- final def makeTrait[T](implicit arg0: Tag[T], arg1: TraitConstructor[T]): MakeDSLUnnamedAfterFrom[T]
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- See also
- final def many[T](implicit tag: Tag[Set[T]], pos: CodePositionMaterializer): SetDSL[T]
Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.
Set bindings are useful for implementing event listeners, plugins, hooks, http routes, etc.
To define a multibinding use
.many
and.add
methods in ModuleDef DSL:import cats.effect._, org.http4s._, org.http4s.dsl.io._, scala.concurrent.ExecutionContext.Implicits.global import distage._ object HomeRouteModule extends ModuleDef { many[HttpRoutes[IO]].add { HttpRoutes.of[IO] { case GET -> Root / "home" => Ok(s"Home page!") } } }
Set bindings defined in different modules will be merged together into a single Set. You can summon a created Set by type
Set[T]
:import cats.implicits._, org.http4s.server.blaze._, org.http4s.implicits._ object BlogRouteModule extends ModuleDef { many[HttpRoutes[IO]].add { HttpRoutes.of[IO] { case GET -> Root / "blog" / post => Ok("Blog post ``$post''!") } } } class HttpServer(routes: Set[HttpRoutes[IO]]) { val router = routes.foldK def serve = BlazeBuilder[IO] .bindHttp(8080, "localhost") .mountService(router, "/") .start } val objects = Injector().produce(HomeRouteModule ++ BlogRouteModule) val server = objects.get[HttpServer] val testRouter = server.router.orNotFound testRouter.run(Request[IO](uri = uri("/home"))).flatMap(_.as[String]).unsafeRunSync // Home page! testRouter.run(Request[IO](uri = uri("/blog/1"))).flatMap(_.as[String]).unsafeRunSync // Blog post ``1''!
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- See also
Guice wiki on Multibindings: https://github.com/google/guice/wiki/Multibindings
- final def modify[T]: ModifyDSL[T, MakeDSL, MakeDSLUnnamedAfterFrom, SetDSL]
Modify a value bound at
T
.Modify a value bound at
T
. Modifiers stack and are all applied beforeT
is added to the object graph; only the final instance is observable.import distage.{Injector, ModuleDef} Injector().produceGet[Int](new ModuleDef { make[Int].from(1) modify[Int](_ + 1) modify[Int](_ + 1) }).use(i => println(s"Got `Int` $i")) // Got `Int` 3
You can also modify while summoning additional dependencies:
modify[Int]("named").by(_.flatAp { (adder: Adder, multiplier: Multiplier) => int: Int => multiplier.multiply(adder.add(int, 1), 10) })
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- implicit final lazy val mutationContext: MutationContext
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- final def tag(tags: BindingTag*): Unit
Add
tags
to all bindings in this module, except for included bindingsAdd
tags
to all bindings in this module, except for included bindings- Attributes
- protected
- Definition Classes
- TagsDSL
- final def toString(): String
- Definition Classes
- ModuleBase → AnyRef → Any
- final def todo[T](implicit arg0: Tag[T], pos: CodePositionMaterializer): MakeDSLUnnamedAfterFrom[T]
Create a dummy binding that throws an exception with an error message when it's created.
Create a dummy binding that throws an exception with an error message when it's created.
Useful for prototyping.
- Attributes
- protected
- Definition Classes
- AbstractBindingDefDSL
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
Deprecated Value Members
- final def includeApplyTags(that: ModuleBase): Unit
Add all bindings in
that
module intothis
moduleAdd all bindings in
that
module intothis
moduleWILL add global tags from TagsDSL#tag to included bindings.
- Attributes
- protected
- Definition Classes
- IncludesDSL
- Annotations
- @deprecated
- Deprecated
(Since version 1.2.9) Outer module's tags are now added to included module by default, use regular
include