Sin forma: convierta una clase de caso en otra con campos en diferente orden
Estoy pensando en hacer algo similar aCopiar campos de forma segura entre clases de casos de diferentes tipos pero con campos reordenados, es decir
case class A(foo: Int, bar: Int)
case class B(bar: Int, foo: Int)
Y me gustaría tener algo para convertir unA(3, 4)
en unaB(4, 3)
- sin formaLabelledGeneric
viene a la mente, sin embargo
LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))
resultados en
<console>:15: error: type mismatch;
found : shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("foo")],Int],shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("bar")],Int],shapeless.HNil]]
(which expands to) shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("foo")],Int],shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("bar")],Int],shapeless.HNil]]
required: shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("bar")],Int],shapeless.::[shapeless.record.FieldType[shapeless.tag.@@[Symbol,String("foo")],Int],shapeless.HNil]]
(which expands to) shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("bar")],Int],shapeless.::[Int with shapeless.record.KeyTag[Symbol with shapeless.tag.Tagged[String("foo")],Int],shapeless.HNil]]
LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))
^
¿Cómo reordenar los campos en el registro (?) Para que esto pueda funcionar con un mínimo de repetitivo?