trait ConfigModule extends ConfigDescriptorModule with ConfigSourceModule with ConfigDocsModule with ReadModule with WriteModule
- Alphabetic
- By Inheritance
- ConfigModule
- ReadModule
- ConfigDocsModule
- WriteModule
- ConfigDescriptorModule
- ConfigSourceModule
- KeyValueModule
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Type Members
-
sealed
trait
ConfigDescriptor[A] extends AnyRef
- Definition Classes
- ConfigDescriptorModule
-
trait
ConfigDescriptorFunctions extends AnyRef
- Definition Classes
- ConfigDescriptorModule
-
sealed
trait
ConfigDocs extends AnyRef
ConfigDocsholds the descriptions and details of aConfigDescriptorwhich can be used to produce documentation.ConfigDocsholds the descriptions and details of aConfigDescriptorwhich can be used to produce documentation.- Definition Classes
- ConfigDocsModule
-
sealed
case class
Table(rows: List[TableRow]) extends Product with Serializable
A Table is a recursive structure that is more easier to be interpreted as Json or Markdown than trying to convert
ConfigDocsto a readable format.A Table is a recursive structure that is more easier to be interpreted as Json or Markdown than trying to convert
ConfigDocsto a readable format.- Definition Classes
- ConfigDocsModule
-
type
CachedReaders = Map[ConfigSource, ManagedReader]
- Definition Classes
- ReadModule
-
type
K = String
- Definition Classes
- ConfigSourceModule → KeyValueModule
-
type
V = String
- Definition Classes
- ConfigSourceModule → KeyValueModule
-
sealed
trait
ConfigSource extends AnyRef
Every ConfigSource at the core is just a
Reader, which is essentially a function that goes fromPropertyTreePathto an actualPropertyTree.Every ConfigSource at the core is just a
Reader, which is essentially a function that goes fromPropertyTreePathto an actualPropertyTree. i.e,f: PropertyTreePath[String] => IO[ReadError[String], PropertyTree[String, String]Later on for eachkeyrepresented asPropertyTreePath[String]internally,fis used to applied to get the value as aPropertyTreeitself.Internal details:
This function
fcan 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
ConfigSourcehas a generalisedmemoizefunction that allows you to memoize the effect required to form the function. In the context of the above example, withsource.memoizewe acquire only a single connection to retrieve the values for all the keys in your product/coproduct for an instance ofread.- Definition Classes
- ConfigSourceModule
Value Members
-
object
Table extends Serializable
- Definition Classes
- ConfigDocsModule
-
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
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
configLayer[A](config: ConfigDescriptor[A])(implicit tag: Tag[A]): ZLayer[ConfigSource, ReadError[K], A]
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 ofconfigLayerif 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.
-
final
def
configLayer_[A](config: ConfigDescriptor[A])(implicit tag: Tag[A]): ZLayer[Any, ReadError[K], A]
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))
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
generateDocs[A](config: ConfigDescriptor[A]): ConfigDocs
Generate documentation based on the
ConfigDescriptor, where aConfigDescriptoris a structure representing the logic to fetch the application config from various sources.Generate documentation based on the
ConfigDescriptor, where aConfigDescriptoris 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
Tablestructure 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
-
def
generateReport[A](config: ConfigDescriptor[A], value: A): Either[String, ConfigDocs]
Generate a report based on the
ConfigDescriptorand anA, where aConfigDescriptorrepresents the logic to fetch the application config from various sources, andArepresents the actual config value that was retrieved.Generate a report based on the
ConfigDescriptorand anA, where aConfigDescriptorrepresents the logic to fetch the application config from various sources, andArepresents the actual config value that was retrieved.- Definition Classes
- ConfigDocsModule
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
getConfig[A](implicit tag: Tag[A]): ZIO[A, Nothing, A]
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 isHas[Config]instead ofConfigallowing you to mixin with other dependencies keeping yourMonadthe sameimport 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") zip int("PORT")).to[MyConfig] from ConfigSource.fromMap(Map()) val main: ZIO[zio.console.Console, Exception, Unit] = app.provideSomeLayer[Console](configLayer_(configDesc))
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
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
read[A](configuration: ConfigDescriptor[A]): IO[ReadError[K], A]
- Definition Classes
- ReadModule
-
final
def
requiredZipAndOrFields[A](config: ConfigDescriptor[A]): Int
- Definition Classes
- ReadModule
-
def
sizeOfZipAndOrErrors(error: ReadError[K]): Int
- Definition Classes
- ReadModule
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
-
final
def
write[A](config: ConfigDescriptor[A], a: A): Either[String, PropertyTree[K, V]]
- Definition Classes
- WriteModule
-
object
ConfigSource
- Definition Classes
- ConfigSourceModule