【发布时间】:2019-10-17 06:48:01
【问题描述】:
我正在使用 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 识别为“未使用”,当触发“优化导入”或启用“动态优化导入”时,导入会自动擦除。根据this 线程(接受的答案对我不起作用),我们可以使用“将导入标记为始终使用...”来解决这个问题,但这不是一个理想的解决方案,因为其他团队成员必须这样做每个项目,或者我们应该将 .idea 提交给 VCS(我想避免)。
【问题讨论】:
标签: scala pureconfig