Umwandeln verschachtelter Fallklassen in verschachtelte Maps mit Shapeless

Ich versuche zu lösenDie question using Shapeless, zusammenfassend geht es darum, eine verschachtelte case-Klasse in Map [String, Any] zu konvertieren. Hier das Beispiel:

case class Person(name:String, address:Address)
case class Address(street:String, zip:Int)

val p = Person("Tom", Address("Jefferson st", 10000))

It will konvertierenp zu folgendem:

Map("name" -> "Tom", "address" -> Map("street" -> "Jefferson st", "zip" -> 10000))

Ich versuche es mit Shapeless zu tunLabelledGeneric, hier ist was ich bisher gemacht habe:

import shapeless._
import record._, syntax.singleton._
import ops.record._
import shapeless.ops.record._

def writer[T,A<:HList,H<:HList](t:T)
(implicit lGeneric:LabelledGeneric.Aux[T,A],
 kys:Keys.Aux[A,H],
 vls:Values[A]) = {
    val tGen = lGeneric.to(t)
    val keys = Keys[lGeneric.Repr].apply
    val values = Values[lGeneric.Repr].apply(tGen)
    println(keys)
    println(values)
  }

Ich versuche, einen rekursiven Schreiber zu haben, der jeden Wert überprüft und versucht, für jedes Element im Wert eine Map zu erstellen. Der obige Code funktioniert gut, aber wenn ich über @ iterieren möchvalues mit einem Beispiel Poly, mit dem folgenden Code habe ich diese Fehler.

values.map(identity)
//or
tGen.map(identity)

Error:(75, 19) could not find implicit value for parameter mapper: shapeless.ops.hlist.FlatMapper[shapeless.poly.identity.type,vls.Out]
    values.flatMap(identity)
                  ^
Error:(75, 19) not enough arguments for method flatMap: (implicit mapper: shapeless.ops.hlist.FlatMapper[shapeless.poly.identity.type,vls.Out])mapper.Out.
Unspecified value parameter mapper.
    values.flatMap(identity)
                  ^

Ich weiß nicht, warum ich diesen Fehler erhalte. Ich würde mich auch freuen zu wissen, ob es einen einfacheren Weg gibt, das Ganze mit Shapeless zu machen.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage