Преобразование между классами дел с одинаковой структурой
У меня есть два идентичных случая классов, скажем
case class JsonOutput(
creationDate: ZonedDateTime,
updateDate: ZonedDateTime,
doctorName: String,
patientName: String,
userName: String
)
а также
case class DbOutput(
creationDate: ZonedDateTime,
updateDate: ZonedDateTime,
doctorName: String,
patientName: String,
userName: String
)
которые структурно одинаковы, но не имеют некоторого отношения (и их сходство может быть изменено в будущем)
Я хочу конвертировать DbOutput
тип, который я получаю из базы данных в JsonOutput
, который позже я буду использовать для преобразования (от Play Json), как
//fullCase is of type JsonOutput
Ok(Json.obj("case" -> fullCase))
Как бы я это сделал?
Замечания:
И что делать в случае вложенной структуры класса case:
case class GeneralInfo(number: Int)
// Nested case class structure
case class JsonOneOutput(text: String)
case class JsonThreeOutput(meta: JsonOneOutput, info: GeneralInfo)
// Nested case class structure
case class DbOneOutput(text: String)
case class DbThreeOutput(meta: DbOneOutput, info: GeneralInfo)
где я снова должен конвертировать DbOutput
в JsonOutput
(и все типы одинаковы, за исключением некоторых типов листовых узлов, таких как DbOneOutput
а также JsonOneOutput
что может быть на глубоком уровне)
1 ответ
Вы, кажется, хотите сделать это с бесформенным, поэтому я бы посоветовал вам взглянуть на документацию. Пример того, как этого можно достичь:
import shapeless.Generic
object FooBar {
case class Foo(a: String, b: Int, c: String)
case class Bar(x: String, y: Int, z: String)
def main(args: Array[String]): Unit = {
val genFoo = Generic[Foo]
val genBar = Generic[Bar]
println(genBar.from(genFoo.to(Foo("foobar", 5, "barfoo"))))
}
}