为什么pureconfig找不到我的隐式读者?

时间:2019-05-23 08:19:17

标签: scala implicit pureconfig

我使用double在配置文件中编码布尔值。在读取配置时,PureConfig无法找到强制转换的方法。


初始问题(请参见下文进行编辑)。

这里有一些代码可以重现此行为。

import com.typesafe.config.ConfigFactory
import pureconfig.ConfigReader
import pureconfig.generic.auto._

object Main {
  def main(args: Array[String]): Unit = {
    println(pureconfig.loadConfig[BooleanTest](ConfigFactory.parseString("a = 1")))
  }
}

case class BooleanTest(a: Boolean)

object ConfigImplicits {
  implicit val myBooleanReader: ConfigReader[Boolean] = ConfigReader[Double].map { n => n > 0}
}

在这里,我希望我的代码能打印BooleanTest的实例。 相反,我得到了ConvertFailure

Left(ConfigReaderFailures(ConvertFailure(WrongType(NUMBER,Set(BOOLEAN)),None,a),List()))

解决此问题的一种方法是在调用import ConfigImplicits._函数之前添加loadConfig。 但是,您可以假设,我的代码实际上是一个较大项目的一部分,并且在实际项目中添加import不能解决我的错误。

您对可能出什么问题有任何暗示吗?

种类, 亚历克西斯。


编辑:

comments from Thilo之后,似乎添加了import语句的逻辑。

下面是代码的更新版本,其中包括import语句,但仍会产生相同的错误...

main函数更改为:

def main(args: Array[String]): Unit = {
  println(ConfigUtils.loadConfig[BooleanTest]("a = 1"))
}

并声明一个ConfigUtils对象,如下所示:

object ConfigUtils {
  def loadConfig[A : ConfigReader](str: String) : ConfigReader.Result[A] = {
    import ConfigImplicits._
    val config = ConfigFactory.parseString(str)
    pureconfig.loadConfig[A](config)
  }
}

运行代码,您将得到与以前相同的错误: ConvertFailure(WrongType(NUMBER,Set(BOOLEAN))

为什么pureconfig不使用我的隐式myBooleanReader来解析此配置?

亲切的亚历克西斯。

0 个答案:

没有答案