0

我正在尝试将 Pureconfig 合并到我的用例中以进行类型安全配置。成功地将 HOCON .conf 映射到案例类类型。但是,如果我必须在对象定义方面限制我的类型而不产生副作用(即抑制默认的 apply() 和 copy()),我将使用以下案例类定义方法:

sealed abstract case class someConfig(name:String)

object someConfig{
    def apply(name:String):Option[someConfig]={
        if(Option(name).isDefined && name.nonEmpty){
            Some(new someConfig(name){})
        } else {
            None
        }
    }
}

为了支持 Option[_] 类型,我正在考虑使用隐式 ConfigReader。这种方法似乎很有效,我需要更多地解决配置键到对象映射和实例化的问题。

到目前为止,我搜索过的例子似乎并没有引起这种需求的共鸣。但是,请务必在对象成员上使用 Option[_]。尝试浏览 Pureconfig git repo 中的代码示例。

有人可以建议一种可以支持 Option[T] 的方法,其中 T 是复合自定义类型吗?而且我不必处理成员变量名称来配置键映射等,即避免必要的样板!

4

1 回答 1

0

因为您已经隐藏了类的构造函数以便通过 进行通道验证apply,所以您必须手动构造一个ConfigReader. 我相信这就像把它放在你的伴侣对象中一样简单:

implicit val configReader = 
  pureconfig.ConfigReader.fromNonEmptyStringOpt[someConfig](apply)

或者,您可以命名实现您的抽象类型的类,在这种情况下,PureConfig 对密封系列的自动派生会神奇地ConfigReader为您创建。

于 2018-01-11T00:51:03.973 回答