我想介绍一些类型来表示更大类型中字段的可能值。该字段需要能够对 JSON 进行编码/解码,还需要能够写入/读取到数据库。
我还是 Scala 的新手,我想要的类型是 sum type Status = NotVerified | Correct | Wrong
。由于我希望有一个与每个构造函数关联的字符串表示,我创建了一个带有String
参数的密封案例类,然后创建了扩展该案例类的对象。为了能够编码/解码,我还需要隐式,但我不确定如何构造它。我可以将它们放在对象内部的一个新对象中,如下所示:
sealed case class Status(name: String)
object Status {
object NotVerified extends Status("not_verified")
object Correct extends Status("correct")
object Wrong extends Status("wrong")
object implicits {
implicit val encodeStatusJson: Encoder[Status] =
_.name.asJson
implicit val decodeStatusJson: Decoder[Status] =
Decoder.decodeString.map(Status(_))
implicit val encodeStatus: MappedEncoding[Status, String] =
MappedEncoding[Status, String](_.name)
implicit val decodeStatus: MappedEncoding[String, Status] =
MappedEncoding[String, Status](Status(_))
}
}
……然后import
在需要的地方明确地显示这些,但那是相当……明确的。
组织这种类型+隐式集合的好方法是什么?