Pureconfig Typesafe配置与密封的抽象案例类

时间:2018-01-10 23:28:53

标签: class case abstract sealed pureconfig

我正在尝试将Pureconfig合并到我的用例中以用于类型安全配置。成功地将HOCON .conf映射到案例类类型。但是,如果我必须约束我的类型而没有对象定义方面的副作用(即,supress默认的apply()和copy()),我对case case使用以下定义方法:

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是复合自定义类型吗?而且我不必处理成员变量名来配置键映射等,即避免必要的样板!

1 个答案:

答案 0 :(得分:0)

由于您已隐藏了班级的构造函数,以便通过apply进行渠道验证,因此您必须手动构建ConfigReader。我相信这就像把它放在伴侣对象中一样简单:

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

或者,您可以命名实现抽象类型的类,在这种情况下,PureConfig's automatic derivation for sealed families会为您神奇地创建ConfigReader