Sem forma - transforme uma classe de caso em outra com campos em ordem diferente
Estou pensando em fazer algo parecido comCopiar campos com segurança entre classes de casos de diferentes tipos mas com campos reordenados, ou seja,
case class A(foo: Int, bar: Int)
case class B(bar: Int, foo: Int)
E eu gostaria de ter algo para transformarA(3, 4)
dentro deB(4, 3)
- sem forma »LabelledGeneric
vem à mente, no entanto
LabelledGeneric[B].from(LabelledGeneric[A].to(A(12, 13)))
resulta em
<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)))
^
Como reordenar os campos no registro (?) Para que isso funcione com um mínimo de clichê?