У меня есть следующая настройка
case class A(eventType : String, fieldOne : Int)
case class B(eventType : String, fieldOne : Int, fieldTwo : Int)
type Event = A :+: B :+: CNil
case class X(id :String, events : List[Event])
И я получаю следующее сообщение Json, X с одним событием (экземпляр B)
{
"id" : "id",
"events" : [
{
"eventType" : "B",
"fieldOne": 1,
"fieldTwo" : 2
}
]
}
Если я использую circe, я могу декодировать это в экземпляр X, однако в списке событий, поскольку A прибывает первым в копродукте, он декодирует его в A.
val actual = X("id", [A("B", 1)])
val expected = X("id", [B("B", 1, 2)])
Я хочу иметь возможность использовать eventType в качестве дискриминатора конфигурации, чтобы определять, какой тип в Coproduct становится вложенным полем.
Я думаю, что ответ здесь
а>
но я не могу понять это в моем случае.