Pureconfig Typesafe Config with sealed abstract case class
Pureconfig Typesafe Config with sealed abstract case class
我正在尝试将 Pureconfig 合并到我的类型安全配置用例中。已成功将 HOCON .conf 映射到 case class 类型。但是,如果我必须在对象定义方面限制我的类型而没有副作用(即抑制默认的 apply() 和 copy()),我将使用以下定义方法来处理案例 class:
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 存储库中的代码示例。
有人可以建议一种可以支持 Option[T] 的方法,其中 T 是复合自定义类型吗?而且我不必处理成员变量名称到配置键映射等,即避免必要的样板文件!
因为您已经隐藏了 class 的构造函数以便通过 apply
进行验证,所以您必须手动构造一个 ConfigReader
。我相信这就像把它放在你的伴随对象中一样简单:
implicit val configReader =
pureconfig.ConfigReader.fromNonEmptyStringOpt[someConfig](apply)
或者,您可以命名 class 实现您的抽象类型,在这种情况下 PureConfig's automatic derivation for sealed families 会神奇地为您创建 ConfigReader
。
我正在尝试将 Pureconfig 合并到我的类型安全配置用例中。已成功将 HOCON .conf 映射到 case class 类型。但是,如果我必须在对象定义方面限制我的类型而没有副作用(即抑制默认的 apply() 和 copy()),我将使用以下定义方法来处理案例 class:
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 存储库中的代码示例。
有人可以建议一种可以支持 Option[T] 的方法,其中 T 是复合自定义类型吗?而且我不必处理成员变量名称到配置键映射等,即避免必要的样板文件!
因为您已经隐藏了 class 的构造函数以便通过 apply
进行验证,所以您必须手动构造一个 ConfigReader
。我相信这就像把它放在你的伴随对象中一样简单:
implicit val configReader =
pureconfig.ConfigReader.fromNonEmptyStringOpt[someConfig](apply)
或者,您可以命名 class 实现您的抽象类型,在这种情况下 PureConfig's automatic derivation for sealed families 会神奇地为您创建 ConfigReader
。