All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pureconfig.syntax.package.scala Maven / Gradle / Ivy

package pureconfig

import scala.reflect.ClassTag

import com.typesafe.config.{Config => TypesafeConfig, ConfigValue}

import pureconfig.error.ConfigReaderException

package object syntax {
  implicit class AnyWriterOps[A](val any: A) extends AnyVal {
    def toConfig(implicit writer: ConfigWriter[A]): ConfigValue = writer.to(any)
  }

  private def getResultOrThrow[Config](
      failuresOrResult: ConfigReader.Result[Config]
  )(implicit ct: ClassTag[Config]): Config = {
    failuresOrResult match {
      case Right(config) => config
      case Left(failures) => throw new ConfigReaderException[Config](failures)
    }
  }

  implicit class ConfigValueReaderOps(val conf: ConfigValue) extends AnyVal {
    def to[A](implicit reader: ConfigReader[A]): ConfigReader.Result[A] = reader.from(conf)
    def toOrThrow[A](implicit reader: ConfigReader[A], cl: ClassTag[A]): A =
      getResultOrThrow(reader.from(conf))(cl)
  }

  implicit class ConfigCursorReaderOps(val cur: ConfigCursor) extends AnyVal {
    def to[A](implicit reader: ConfigReader[A]): ConfigReader.Result[A] = reader.from(cur)
    def toOrThrow[A](implicit reader: ConfigReader[A], cl: ClassTag[A]): A =
      getResultOrThrow(reader.from(cur))(cl)
  }

  implicit class ConfigReaderOps(val conf: TypesafeConfig) extends AnyVal {
    def to[A](implicit reader: ConfigReader[A]): ConfigReader.Result[A] = conf.root().to[A]
    def toOrThrow[A](implicit reader: ConfigReader[A], cl: ClassTag[A]): A =
      getResultOrThrow(conf.root().to[A])(cl)
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy