首页 > 解决方案 > 使用 circe-config 进行配置的通用解析器

问题描述

我有一个枚举:

import com.typesafe.config.Config
import enumeratum.{Enum, EnumEntry}
import io.circe
import io.circe.config.syntax._
import io.circe.generic.extras.auto._

sealed trait MyEnum extends EnumEntry

object MyEnum extends Enum[MyEnum] {
  case class Foo(a: String) extends MyEnum

  object Foo {
    def parse(config: Config): Either[circe.Error, Foo] = config.as[Foo]
  }

  case class Bar(b: Int) extends MyEnum

  object Bar {
    def parse(config: Config): Either[circe.Error, Bar] = config.as[Bar]
  }

  def values = findValues
}

typesafe-config像这样我可以用和解析配置文件io-circe。我想做的是定义一个解析方法,它根据输入类型解析我的配置。

sealed trait MyEnum extends EnumEntry

object MyEnum extends Enum[MyEnum] {

  def parse[T <: MyEnum](config: Config): Either[circe.Error, T] = config.as[T]  

  case class Foo(a: String) extends MyEnum

  case class Bar(b: Int) extends MyEnum

  def values = findValues
}

然后我会这样使用:

val config: Config = ???

val result = MyEnum.parse[Foo](config)

不幸的是它没有编译,我错过了什么?可能吗?

标签: scalaenumsconfigurationcirce

解决方案


推荐阅读