我正在使用 pureconfig pureconfig lib 和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 类 - > 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 识别为“未使用”,当触发“优化导入”或启用“动态优化导入”时,导入会自动删除。根据这个线程(接受的答案对我不起作用),我们可以使用“将导入标记为始终使用...”来解决这个问题,但这不是一个理想的解决方案,因为其他团队成员必须为每个项目做同样的事情或者我们应该将 .idea 提交给 VCS(我想避免)。