我使用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
来解析此配置?
亲切的亚历克西斯。