I have a Scala reflection Symbol.
val symbol = scala.reflect.api.Symbol
how can I cast an object
val obj: Any
to the type of that Symbol ?
reason why I am asking is that I have a implicit method to convert Map[String, Any] to a Scala case class, but in side I want to to cast on each field.
TODO part is the place I want to cast the type.
object MapStringAnyOps {
  implicit class MapStringAnyOps(m: Map[String, _]) {
    def toCaseClass[T: TypeTag : ClassTag]: T = {
      val rm = runtimeMirror(classTag[T].runtimeClass.getClassLoader)
      val destType = typeOf[T]
      val classTest = destType.typeSymbol.asClass
      val classMirror = rm.reflectClass(classTest)
      val constructor = destType.decl(termNames.CONSTRUCTOR).asMethod
      val constructorMirror = classMirror.reflectConstructor(constructor)
      val constructorArgs = constructor.paramLists.flatten.map((param: Symbol) => {
        val paramName = param.name.toString
        if (param.typeSignature <:< typeOf[Option[Any]])
          m.get(paramName)  **// TODO in here, I can to cast this value of Any into the proper type of this field, but I only have Symbol so I can't simply use asInstanceOf[T]**
        else
          m.getOrElse(paramName, throw new IllegalArgumentException("Map is missing required parameter named " + paramName))
      })
      try {
        constructorMirror(constructorArgs: _*).asInstanceOf[T]
      } catch {
        case e: java.lang.IllegalArgumentException =>
          throw new java.lang.IllegalArgumentException(s"Error mapping to class constructor:\n Casting from row: ${constructorArgs.map(r => r.getClass.getName).mkString(",")}, to constructor: ${constructor.paramLists.flatten.map(r => r.typeSignature.toString).mkString(",")}", e)
      }
    }
  }
}
 
    