Trait

zio.config

ConfigModule

Related Doc: package config

Permalink

trait ConfigModule extends ConfigDescriptorModule with ConfigSourceModule with ConfigDocsModule with ReadModule with WriteModule

Linear Supertypes
Known Subclasses
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ConfigModule
  2. ReadModule
  3. ConfigDocsModule
  4. WriteModule
  5. ConfigDescriptorModule
  6. ConfigSourceModule
  7. KeyValueModule
  8. AnyRef
  9. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Type Members

  1. type CachedReaders = Map[ConfigSource, ManagedReader]

    Permalink
    Definition Classes
    ReadModule
  2. sealed trait ConfigDescriptor[A] extends AnyRef

    Permalink
    Definition Classes
    ConfigDescriptorModule
  3. trait ConfigDescriptorFunctions extends AnyRef

    Permalink
    Definition Classes
    ConfigDescriptorModule
  4. sealed trait ConfigDocs extends AnyRef

    Permalink

    ConfigDocs holds the descriptions and details of a ConfigDescriptor which can be used to produce documentation.

    ConfigDocs holds the descriptions and details of a ConfigDescriptor which can be used to produce documentation.

    Definition Classes
    ConfigDocsModule
  5. sealed trait ConfigSource extends AnyRef

    Permalink

    Every ConfigSource at the core is just a Reader, which is essentially a function that goes from PropertyTreePath to an actual PropertyTree.

    Every ConfigSource at the core is just a Reader, which is essentially a function that goes from PropertyTreePath to an actual PropertyTree. i.e, f: PropertyTreePath[String] => IO[ReadError[String], PropertyTree[String, String] Later on for each key represented as PropertyTreePath[String] internally, f is used to applied to get the value as a PropertyTree itself.

    Internal details:

    This function f can be retrieved under an ZManaged effect. This implies it may involve an IO with managing resources to even form this function. Example: In order to retrieve a property-tree corresponding to a key (PropertyTreePath), it requires a database connection in the very first instance.

    // pseudo-logic, doesn't compile

    val source: ConfigSource = ConfigSource.Reader( ZManaged(getDatabaseConnection) .flatMap(connection => (key: PropertyTreePath[String] => IO.effect(connection.getStatement.executeQuery(s"get key from table"))) )

    Note that ConfigSource has a generalised memoize function that allows you to memoize the effect required to form the function. In the context of the above example, with source.memoize we acquire only a single connection to retrieve the values for all the keys in your product/coproduct for an instance of read.

    Definition Classes
    ConfigSourceModule
  6. type K = String

    Permalink
    Definition Classes
    ConfigSourceModuleKeyValueModule
  7. sealed case class Table(rows: List[TableRow]) extends Product with Serializable

    Permalink

    A Table is a recursive structure that is more easier to be interpreted as Json or Markdown than trying to convert ConfigDocs to a readable format.

    A Table is a recursive structure that is more easier to be interpreted as Json or Markdown than trying to convert ConfigDocs to a readable format.

    Definition Classes
    ConfigDocsModule
  8. type V = String

    Permalink
    Definition Classes
    ConfigSourceModuleKeyValueModule

Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  4. object ConfigSource

    Permalink
    Definition Classes
    ConfigSourceModule
  5. object Table extends Serializable

    Permalink
    Definition Classes
    ConfigDocsModule
  6. final def asInstanceOf[T0]: T0

    Permalink
    Definition Classes
    Any
  7. def clone(): AnyRef

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  8. final def configLayer[A](config: ConfigDescriptor[A])(implicit tag: Tag[A]): ZLayer[ConfigSource, ReadError[K], A]

    Permalink

    Convert a ConfigDescriptor to a Layer, which further requires a ConfigSource as input.

    Convert a ConfigDescriptor to a Layer, which further requires a ConfigSource as input. Note: Use configLayer_ instead of configLayer if ConfigSource information is already embedded in the descriptor.

    Example usage:

    final case class MyConfig(age: Int)
    
    val appConfigLayer  =
       ConfigSource.fromMap(Map("age" -> "20")).toLayer >>> configLayer(int("age").to[MyConfig])
    
    val app: ZIO[MyConfig with zio.console.Console,java.io.IOException, Unit] =
      getConfig[MyConfig].flatMap(Console.printLine)
    
    app.provideSomeLayer[Console](appConfigLayer)
    // ZIO[zio.console.Console, Exception, Unit]

    This can also be simplified to

    val appConfigLayer  =
     configLayer_(int("age").to[MyConfig] from  ConfigSource.fromMap(Map("age" -> "20")))
    
    app.provideSomeLayer[Console](appConfigLayer)

    The preference depends on how you want to design the entry point to managing config of your app.

  9. final def configLayer_[A](config: ConfigDescriptor[A])(implicit tag: Tag[A]): ZLayer[Any, ReadError[K], A]

    Permalink

    Convert a ConfigDescriptor to a Layer.

    Convert a ConfigDescriptor to a Layer.

    Example usage:

    final case class MyConfig(age: Int, name: String)
    
    object MyConfig {
      val config =
        (int("age") zip string("name")).to[MyConfig] from ConfigSource.fromMap(Map("age" -> "20", "name" -> "afsal"))
    }
    
    val app: ZIO[Has[MyConfig] with zio.console.Console, java.io.IOException, Unit] =
      getConfig[MyConfig].flatMap(putStrLn)
    
    val io: ZIO[zio.console.Console, Exception, Unit] =
      app.provideSomeLayer[Console](configLayer_(MyConfig.config))
    
    println(zio.Runtime.default.unsafeRun(io))
  10. final def eq(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  11. def equals(arg0: Any): Boolean

    Permalink
    Definition Classes
    AnyRef → Any
  12. def finalize(): Unit

    Permalink
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  13. final def generateDocs[A](config: ConfigDescriptor[A]): ConfigDocs

    Permalink

    Generate documentation based on the ConfigDescriptor, where a ConfigDescriptor is a structure representing the logic to fetch the application config from various sources.

    Generate documentation based on the ConfigDescriptor, where a ConfigDescriptor is a structure representing the logic to fetch the application config from various sources.

    Once we generate the docs, this can be converted to a light weight Table structure which is much more easier to be converted to markdown or json formats.

    Example :

    val configDescriptor: ConfigDescriptor[MyAppConfig] = ???
    
    generatedDocs(configDescriptor).toTable.toGithubFlavouredMarkdown
    Definition Classes
    ConfigDocsModule
  14. def generateReport[A](config: ConfigDescriptor[A], value: A): Either[String, ConfigDocs]

    Permalink

    Generate a report based on the ConfigDescriptor and an A, where a ConfigDescriptor represents the logic to fetch the application config from various sources, and A represents the actual config value that was retrieved.

    Generate a report based on the ConfigDescriptor and an A, where a ConfigDescriptor represents the logic to fetch the application config from various sources, and A represents the actual config value that was retrieved.

    Definition Classes
    ConfigDocsModule
  15. final def getClass(): Class[_]

    Permalink
    Definition Classes
    AnyRef → Any
  16. final def getConfig[A](implicit tag: Tag[A]): ZIO[A, Nothing, A]

    Permalink

    Example usage:

    Example usage:

    A helper method allowing you to forget passing configs as arguments to all over the place in your app. Whereever, you need to access the config, simply call getConfig[MyConfig].flatMap(config => ???).

    PS: if you are familiar with Kleisli, this is similar to using Kleisi[IO, Config, A], except for the fact that it is Has[Config] instead of Config allowing you to mixin with other dependencies keeping your Monad the same

    import zio.console._
    
    final case class MyConfig(username: String, port: Int)
    
    val app: ZIO[Has[MyConfig] with Console, java.io.IOException, Unit] =
      for {
         config <- getConfig[MyConfig]
         _      <- putStrLn(config.toString)
      } yield ()
    
    val configDesc =
      (string("USERNAME") |@| int("PORT")).to[MyConfig] from ConfigSource.fromMap(Map())
    
    val main: ZIO[zio.console.Console, Exception, Unit] =
      app.provideSomeLayer[Console](configLayer_(configDesc))
  17. def hashCode(): Int

    Permalink
    Definition Classes
    AnyRef → Any
  18. final def isInstanceOf[T0]: Boolean

    Permalink
    Definition Classes
    Any
  19. final def ne(arg0: AnyRef): Boolean

    Permalink
    Definition Classes
    AnyRef
  20. final def notify(): Unit

    Permalink
    Definition Classes
    AnyRef
  21. final def notifyAll(): Unit

    Permalink
    Definition Classes
    AnyRef
  22. final def read[A](configuration: ConfigDescriptor[A]): IO[ReadError[K], A]

    Permalink
    Definition Classes
    ReadModule
  23. final def requiredZipAndOrFields[A](config: ConfigDescriptor[A]): Int

    Permalink
    Definition Classes
    ReadModule
  24. def sizeOfZipAndOrErrors(error: ReadError[K]): Int

    Permalink
    Definition Classes
    ReadModule
  25. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  26. def toString(): String

    Permalink
    Definition Classes
    AnyRef → Any
  27. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  28. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  29. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  30. final def write[A](config: ConfigDescriptor[A], a: A): Either[String, PropertyTree[K, V]]

    Permalink
    Definition Classes
    WriteModule

Inherited from ReadModule

Inherited from ConfigDocsModule

Inherited from WriteModule

Inherited from ConfigDescriptorModule

Inherited from ConfigSourceModule

Inherited from KeyValueModule

Inherited from AnyRef

Inherited from Any

Ungrouped