我试图坚持使用ADT属性的案例类。让我们说:
sealed trait Status
case object Ok
case object Fail
case class Operation(_id: String, status: Status).
我尝试了official approach,但它仅适用于案例类,而对案例对象则失败。还尝试使用Status-String映射定义自定义编解码器。但这种做法也破裂了。
class StatusCodec extends Codec[Status]{
override def encode(writer: BsonWriter, value: Status, encoderContext: EncoderContext): Unit = {
writer.writeString(value.toString)
}
override def getEncoderClass: Class[Status] = classOf[Status]
override def decode(reader: BsonReader, decoderContext: DecoderContext): Status = {
reader.readString match{
case "Ok" => Ok
case "Fail" => Fail
}
}
}
终于在mongo JIRA中找到了相关的功能请求 我找到的唯一解决方法是使用普通文档类型。
还有更多选择吗?