I cannot wrap my head around why it throws an error on the following line:
val anyReads = Reads[Any](m => metaValueToJsValue(m))
Error Message: type mismatch; found : play.api.libs.json.JsValue required: play.api.libs.json.JsResult[Any] Note: implicit value readsMap is not applicable here because it comes after the application point and it lacks an explicit result type
I've pasted my code below. Any help is appreciated! Thanks!
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.functional.syntax._
case class TempClass(
metaValue: Option[Map[String, Any]])
object TempClass {
val anyReads = Reads[Any](m => metaValueToJsValue(m))
def metaValueToJsValue(m: Any): JsValue = {
m match {
case s: String => JsString(s)
case n: Int => JsNumber(n): JsValue
case n: Long => JsNumber(n): JsValue
case n: Double => JsNumber(n): JsValue
case n: BigDecimal => JsNumber(n): JsValue
case b: Boolean => JsBoolean(b)
case l: Seq[Any] => JsArray(l.map(metaValueToJsValue)): JsValue
}
}
implicit val readsMap = Reads[Map[String, Any]](m => Reads.mapReads[Any](anyReads).reads(m))
implicit val reads = Json.reads[TempClass]
}