I have code that does some common operation on json objects, namely extract. So what I would like to create generic function that takes type parameter which class to expect, code looks like as follows:
def getMessageType[T](json: JValue): Either[GenericError,T] = {
try {
Right(json.extract[T])
} catch {
case e: MappingException => jsonToError(json)
}
}
The issue is how to pass T information to that function ?
If you look at the definition of extract: you will see that it takes a
Manifestimplicitly:This gets around JVM type erasure by taking the “type” in as a value. For your
case, I think you should do the same thing:
This:
Gives your method implicit parameters, which must be fulfilled by the caller.
Creates (those same) implicit parameters to pass them on to
extract.