A "simple" way of extracting the fields from any case class:
def extractFieldNames[T<:Any](implicit m: Manifest[T]) = { implicitly[Manifest[T]].runtimeClass.getDeclaredFields.map(_.getName).filter(!_.equals("$outer"))}