Packages

sealed abstract class ConfigValue[A] extends AnyRef

Represents a configuration value or a composition of multiple values.

If a configuration value is missing, we can use ConfigValue#or to try and load the value from elsewhere. ConfigValue#default can be used to set a default value if all other values are missing. If the value is optional, ConfigValue#option can be used to default to None if all values are missing.

Values can be converted to a different type using ConfigValue#as. If the value might contain sensitive details, ConfigValue#secret can be used to redact sensitive details from error messages while also wrapping the value in Secret, preventing the value from being shown.

Sometimes, we first need to load a configuration value to determine how to continue loading the remaining values. In such cases, it's suitable to use ConfigValue#flatMap. When loading values in sequence using flatMap, errors are not accumulated, and so only the first error will be available.

Parallel composition lets us achieve error accumulation. Functions like parMapN and parTupled on tuples of ConfigValues loads several values while also accumulating errors. It is often helpful to see all errors when loading configurations, so prefer options which accumulate errors.

Configuration values can be loaded using ConfigValue#load, which loads the value using a specified effect type. If there are errors and we want to deal with them explicitly, ConfigValue#attempt can be used.

Example:
  1. scala> import cats.implicits._
    import cats.implicits._
    
    scala> case class Config(maxRetries: Int, apiKey: Option[Secret[String]])
    defined class Config
    
    scala> val maxRetries = env("MAX_RETRIES").or(prop("max.retries")).as[Int].default(5)
    maxRetries: ConfigValue[Int] = ciris.ConfigValue$$$$anon$$3@5821f472
    
    scala> val apiKey = env("API_KEY").or(prop("api.key")).secret.option
    apiKey: ConfigValue[Option[Secret[String]]] = ciris.ConfigValue$$$$anon$$3@186ab4b8
    
    scala> val config = (maxRetries, apiKey).parMapN(Config)
    config: ciris.ConfigValue[Config] = ciris.ConfigValue$$$$anon$$3@565e528c
Linear Supertypes
AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ConfigValue
  2. AnyRef
  3. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

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 as[B](implicit decoder: ConfigDecoder[A, B]): ConfigValue[B]

    Returns a new ConfigValue which attempts to decode the value to the specified type.

  5. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  6. final def attempt[F[_]](implicit F: Async[F], context: ContextShift[F]): F[Either[ConfigError, A]]

    Returns an effect of the specified type which attempts to load the configuration value.

  7. def clone(): AnyRef
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  8. final def default(value: => A): ConfigValue[A]

    Returns a new ConfigValue which uses the specified default if the value is missing.

    Returns a new ConfigValue which uses the specified default if the value is missing.

    If a previous default value has been specified, a later default will override the earlier. If a default value is specified for a composition of values, the default will be used in case all values are either missing or are default values themselves.

    Using .default(a) is equivalent to using .or(default(a)).

  9. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  10. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  11. final def evalMap[F[_], B](f: (A) => F[B])(implicit F: Effect[F]): ConfigValue[B]

    Returns a new ConfigValue which applies the specified effectful function on the value.

  12. def finalize(): Unit
    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  13. final def flatMap[B](f: (A) => ConfigValue[B]): ConfigValue[B]

    Returns a new ConfigValue which loads the specified configuration using the value.

  14. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  15. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  16. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  17. final def load[F[_]](implicit F: Async[F], context: ContextShift[F]): F[A]

    Returns an effect of the specified type which loads the configuration value.

  18. final def map[B](f: (A) => B): ConfigValue[B]

    Returns a new ConfigValue which applies the specified function on the value.

  19. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  20. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  21. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  22. final def option: ConfigValue[Option[A]]

    Returns a new ConfigValue which uses None as the default if the value is missing.

    Returns a new ConfigValue which uses None as the default if the value is missing.

    Using .option is equivalent to using .map(_.some).default(None).

  23. final def or(value: => ConfigValue[A]): ConfigValue[A]

    Returns a new ConfigValue which uses the specified configuration if the value is missing.

    Returns a new ConfigValue which uses the specified configuration if the value is missing.

    If the value is a default value, an attempt is made to use the specified configuration, and if that is also missing, the default value remains. Defaults in the specified configuration will override any previous defaults. Errors from both the value and the specified configuration are accumulated.

  24. final def parFlatMap[B](f: (A) => ConfigValue[B]): ConfigValue[B]

    Returns a new ConfigValue which loads a configuration with the specified dependency.

    Returns a new ConfigValue which loads a configuration with the specified dependency.

    We can think of ConfigValue#flatMap as first loading a configuration, then creating a separate configuration based on the result. In contrast, ConfigValue#parFlatMap describes a single configuration with dependencies between values.

  25. final def redacted: ConfigValue[A]

    Returns a new ConfigValue with sensitive details redacted from error messages.

    Returns a new ConfigValue with sensitive details redacted from error messages.

    Using .redacted is equivalent to using .secret.map(_.value), except without requiring a Show instance.

  26. final def secret(implicit show: Show[A]): ConfigValue[Secret[A]]

    Returns a new ConfigValue which treats the value like it might contain sensitive details.

    Returns a new ConfigValue which treats the value like it might contain sensitive details.

    Sensitive details are redacted from error messages. The value is wrapped in Secret, which prevents the value from being shown.

    Using .secret is equivalent to using .redacted.map(Secret(_)).

  27. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  28. def toString(): String
    Definition Classes
    AnyRef → Any
  29. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  30. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  31. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from AnyRef

Inherited from Any

Ungrouped