我使用 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
在实际项目中添加并不能解决我的错误。
您对可能出现的问题有任何提示吗?
善良,亚历克西斯。
编辑:
在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
来解析这个配置?
善良,亚历克西斯。