pureconfig可以使用驼峰配置吗

Can pureconfig use camel case config

我正在使用 pureconfig pureconfig lib with pureconfig-yaml 模块。一切都很顺利,我唯一的问题是我必须将 属性 名称从骆驼大小写转换为烤肉串大小写。

来自现实世界的痛苦例子:

case class Config(log4JPath: String, registryURL: String, HOUR_FORMAT: String)

Yaml:
log-4-j-path: /conf/log4j.properties
registry-url: http://foo.com
hour-_-format: dd-mm-yy

我不想维护 2 种不同的案例类型并考虑如何从一种转换为另一种,我希望拥有纯复制和粘贴 scala class -> yaml 配置解决方案。我有机会在两边都实现骆驼案例吗?

编辑:

我已经围绕 pureconfig lib 创建了一个包装器,它执行一些由环境变量覆盖的配置。客户应按以下方式使用包装器:

val conf: Config = ConfigLoader(file).load[Config]

但这还不够,客户需要提供 2 个导入:

// to find implicit reader
import pureconfig.generic.auto._
// to use Camelcase - as suggested from the answer
import ConfigLoader.productHint

如果包装器 (ConfigLoader) 可以处理导入并且它们不会由客户负责,那就太好了。 此外,IntelliJ IDE 将导入标识为 "Unused",当触发 "optimize imports" 或启用 "Optimize imports on the fly" 时,导入将被自动删除。根据 线程(接受的答案对我不起作用),我们可以用 "Mark import as always used..." 解决这个问题,但这不是一个理想的解决方案,因为其他团队成员必须对每个项目或我们应该将 .idea 提交给 VCS(我想避免)。

我附上了我的测试截图(依赖项 pureconfig.generic.auto._ 已经被标记为一直使用):

是的,你可以。看看 documentation - field-mappings.

import pureconfig._
import pureconfig.generic.auto._
import pureconfig.generic.ProductHint

// Case classes should be final ;)
final case class Config(log4JPath: String, registryURL: String, HOUR_FORMAT: String)

val yaml =
  """log4JPath: /conf/log4j.properties
    |registryURL: http://foo.com
    |HOUR_FORMAT: dd-mm-yy""".stripMargin

implicit val indentityHint: ProductHint[Conf] =
  ProductHint[Conf](new ConfigFieldMapping {
    def apply(fieldName: String) = fieldName // Basically the identity.
  }) 

loadYaml[Config](yaml)
// res: ConfigReader.Result[Config] = Right(Config("/conf/log4j.properties", "http://foo.com", "dd-mm-yy"))

(注意,这是在菊石中测试的,使用 pureconfig 0.11.0