scala - 为什么 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
在实际项目中添加并不能解决我的错误。
您对可能出现的问题有任何提示吗?
善良,亚历克西斯。
编辑:
在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
来解析这个配置?
善良,亚历克西斯。
解决方案
推荐阅读
- snowflake-cloud-data-platform - 文字值和表值的雪花行为不同
- javascript - 在 Next.js 项目上输出构建的开发文件
- mysql - Mysql Json Extract - 密钥的通配符选择
- r - R:格式化情节悬停文本
- android - 如何将图像保存到主画廊?
- postgresql - 如何使用 GORM 在 Postgres 的 JSONB 字段中插入数据
- python - 'NoneType' 对象不可下标'
- java - 这个非常简单的代码应该可以工作,但它没有
- android-jetpack - 如何在 Compose 中创建 DialogFragment?
- ios - 如何将 POST 请求响应永久保存为 PDF 文件,以便用户稍后可以在 iOS 应用程序中从应用程序外部打开它?