Packages

case class Descriptor[T](desc: config.ConfigDescriptor[T], isObject: Boolean = false) extends Product with Serializable

Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Descriptor
  2. Serializable
  3. Product
  4. Equals
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new Descriptor(desc: config.ConfigDescriptor[T], isObject: Boolean = false)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def ??(description: String): Descriptor[T]

    To add documentation while defining an instance of Descriptor.

    To add documentation while defining an instance of Descriptor.

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFail(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, r => Right(r.toString))

    With ??, you can provide documentation as well.

    That is:

    implicit def deriveForZonedDateTime: Descriptor[ZonedDateTime] =
      descriptorForZonedDateTime ?? "Time in UTC"
    
    descriptor[MyConfig] // then works
  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  7. def default(value: T): Descriptor[T]

    To provide default values while defining an instance of Descriptor.

    To provide default values while defining an instance of Descriptor.

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFail(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, r => Right(r.toString))

    With default, you can provide documentation as well.

    That is:

    implicit def deriveForZonedDateTime: Descriptor[ZonedDateTime] =
      descriptorForZonedDateTime.default(ZonedDateTime.now())
    
    descriptor[MyConfig] // then works
  8. val desc: config.ConfigDescriptor[T]
  9. def describe(description: String): Descriptor[T]

    To add documentation while defining an instance of Descriptor.

    To add documentation while defining an instance of Descriptor.

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFail(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, r => Right(r.toString))

    With describe, you can provide documentation as well.

    That is:

    implicit def deriveForZonedDateTime: Descriptor[ZonedDateTime] =
      descriptorForZonedDateTime describe "Time in UTC"
    
    descriptor[MyConfig] // then works
  10. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  11. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  12. def from(that: config.ConfigSource): Descriptor[T]

    To provide source while defining an instance for descriptor

    To provide source while defining an instance for descriptor

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime, username: String)

    In this case, define a Descriptor for ZonedDateTime using

    val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFail(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, r => Right(r.toString))

    With from, you can provide documentation as well.

    That is:

    val defaultSource: ConfigSource = ???
    
    implicit def deriveForZonedDateTime: Descriptor[ZonedDateTime] =
      descriptorForZonedDateTime from defaultSource
    
    val envSource: ConfigSource = ???
    
    val result: Either[ReadError[String], MyConfig] = read(descriptor[MyConfig] from envSource)

    For ZonedDateTime, it always tries the defaultSource first, and then if it fails tries the envSource.

  13. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  14. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  15. val isObject: Boolean
  16. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  17. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  18. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  19. def productElementNames: Iterator[String]
    Definition Classes
    Product
  20. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  21. def transform[B](f: (T) => B, g: (B) => T): Descriptor[B]

    transform allows us to define instance of Descriptor

    transform allows us to define instance of Descriptor

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    implicit val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transform(string => ZonedDateTime.parse(string), _.toString)
    
     descriptor[MyConfig] // now works

    However, we recommend you using transformOrFail, because in the above case ZonedDateTime.parse(string) may fail and isn't handled anywhere. With transformOrFail, its properly handled and will be part of the error message if zio-config fails to retrieve the config.

  22. def transformOrFail[B](f: (T) => Either[String, B], g: (B) => Either[String, T]): Descriptor[B]

    transformOrFail allows us to define instance of Descriptor

    transformOrFail allows us to define instance of Descriptor

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    implicit val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFail(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, r => Right(r.toString))
    
    descriptor[MyConfig] // now works

    You can also see the ZonedDateTime => String doesn't fail, and we had to lift to Either type using Right constructor. Hence it is better off using transformOrFailLeft in this case.

  23. def transformOrFailLeft[B](f: (T) => Either[String, B])(g: (B) => T): Descriptor[B]

    transformOrFailLeft allows us to define instance of Descriptor

    transformOrFailLeft allows us to define instance of Descriptor

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor. However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    implicit val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFailLeft(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, _.toString)
    
    descriptor[MyConfig] // now works
  24. def transformOrFailRight[E, B](f: (T) => B, g: (B) => Either[String, T]): Descriptor[B]

    transformOrFailRight allows us to define instance of Descriptor

    transformOrFailRight allows us to define instance of Descriptor

    To give an overview of what Descriptor:

    descriptor[MyConfig] works only if all the types that forms MyConfig has an instance of Descriptor. For almost all the important types, zio-config-magnolia already provides implicit instances for Descriptor.

    However, say you have a type ZonedDateTime, for which zio-config hasn't provided instance of Descriptor, then it will fail to compile.

    case class MyConfig(x: ZonedDateTime)

    In this case, define a Descriptor for ZonedDateTime using

    implicit val descriptorForZonedDateTime: Descriptor[ZonedDateTime] =
     Descriptor[String].transformOrFailRight(string => Try(ZonedDateTime.parse(string).toEither.swap.map(_.getMessage).swap, _.toString)
    
    descriptor[MyConfig] // now works
  25. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  26. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  27. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from Serializable

Inherited from Product

Inherited from Equals

Inherited from AnyRef

Inherited from Any

Ungrouped