Вот что я имею в виду — скажем, у меня есть поле с именем medical_payments
— оно может «либо» быть ограничением, если кто-то выберет или отменит
{
"medical_payments":
{
"limit_value":"one_hundred"
}
}
Если он выбран в качестве отказа, то он должен быть:
{
"medical_payments":
{
"waived":true
}
}
Пока вот что у меня есть:
sealed trait LimitOrWaiver
case class Limit(limit_key: String) extends LimitOrWaiver
case class Waived(waived: Boolean) extends LimitOrWaiver
case class Selection(medical_payments: LimitOrWaiver)
Образец данных:
Selection(medical_payments = Limit("one_hundred")).asJson
Выход:
{
"medical_payments":
{
"Limit": { "limit_value":"one_hundred" } // additional object added
}
}
Точно так же для Selection(medical_payments = Waived(true)).asJson
в Json добавляется дополнительный Waived:{...}
.
Я бы хотел, чтобы это было или/или. Каков наилучший способ добиться этого?
Единственный способ, который я смог придумать (не по моему вкусу), — это использовать forProductN
функции согласно документу и делать все это вручную, но это слишком громоздко для большого Json.