【问题标题】:Using PureConfig with Refined?将 PureConfig 与 Refined 一起使用?
【发布时间】:2018-11-05 13:53:23
【问题描述】:

我有以下配置文件:

connection.port = 8080
connection.interface = "127.0.0.1"

我在阅读此文件时尝试使用精炼和精炼-pureconfig。我有以下课程:

import com.api.models.{Config, Connection}
import com.typesafe.config.ConfigFactory
import pureconfig.error.ConfigReaderFailures
import pureconfig.loadConfig

object Configuration {
  val config = ConfigFactory.load()

  val stuff: Either[ConfigReaderFailures, Connection] = loadConfig[Connection](config)



 stuff match {
   case Left(left) => println(left)
   case Right(right) => println(right)
 }
}

这是阅读下面的案例类:

case class Connection(port: Int, interface: String)

但是,当我尝试编译它时,我收到以下错误:

Error:(19, 79) could not find implicit value for parameter reader: pureconfig.Derivation[pureconfig.ConfigReader[com.api.models.Connection]]
  val stuff: Either[ConfigReaderFailures, Connection] = loadConfig[Connection](config)

我真的不知道如何创建这样一个隐含的?

【问题讨论】:

  • 你的进口是什么?
  • 添加scalacOptions += "-Xmacro-settings:materialize-derivations" 进行构建以获得更好的隐式提示。见here
  • 我已经添加了,没有出现同样的错误!
  • @DominicEgger - 我已经添加了导入,谢谢!

标签: scala pureconfig refined


【解决方案1】:

您很可能错过了一个导入,可能是这个: import pureconfig.generic.auto._

https://pureconfig.github.io/docs/

如果您对这里发生的事情感兴趣,可以查看“类型类派生”

编辑:请注意,现在这与精炼类型无关,因为您的代码片段没有使用它们。

【讨论】:

  • 我遇到了类似的问题,添加此导入语句对我有用。但是,IDE 显示此导入未使用。你知道为什么导入如此重要吗?
  • 所以我认为“IDE”是指intellij?隐含价值的问题是非常臭名昭著的。基本上,intellij 有它自己的 scala 编译器来检查您的编码器,有时它只是错误的(您甚至可以在某些情况下,intellij 会在红色下划线的代码工作得很好)。导入本身很重要,因为这是 pureconfig 在编译时用于为给定类型创建解码器的隐式定义的地方。
猜你喜欢
  • 1970-01-01
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多