我正在尝试为一个共同特征定义一个 avro4s 模式派生。示例
trait Event
case class UserCreated(name: String, age: Int) extends Event
case class UserDeleted(reason: String) extends Event
具体类的推导似乎很简单:
given userCreatedSchemaFor = SchemaFor[UserCreated]
given userDeletedSchemaFor = SchemaFor[UserDeleted]
我很想实现这样的假代码:
given eventSchemaFor = new SchemaFor[Event] {
CASE (userCreated) => USE userCreatedSchemaFor
CASE (userDeleted) => USE userDeletedSchemaFor
}
SchemaFor 特征和对象公开了一些应用变体和“工厂”方法,但我无法找到将它们用于我的目的的方法。感谢您的帮助。
sealed trait
开箱即用地支持层次结构(请参阅此表中的内置类型映射)以及关于这些此处的更多注释。 以下内容按预期工作,无需任何进一步干预:
import com.sksamuel.avro4s.SchemaFor
sealed trait Event
case class UserCreated(name: String, age: Int) extends Event
case class UserDeleted(reason: String) extends Event
val schemaForEvent = SchemaFor[Event]
val schemaForUserCreated = SchemaFor[UserCreated]
val schemaForUserDeleted = SchemaFor[UserDeleted]
您可以在 Scastie 上使用此代码。