Skip to content

Instantly share code, notes, and snippets.

@farmdawgnation
Created July 24, 2014 02:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save farmdawgnation/5470ac82f520936b5835 to your computer and use it in GitHub Desktop.
Save farmdawgnation/5470ac82f520936b5835 to your computer and use it in GitHub Desktop.
Singleton Serializer
abstract class SingletonSerializer[T](implicit mf: Manifest[T]) extends Serializer[T] {
val SingletonClass: Class[T] = mf.runtimeClass.asInstanceOf[Class[T]]
def deserialize(implicit format: Formats): PartialFunction[(TypeInfo, JValue), T] = {
case (TypeInfo(SingletonClass, _), json) if json.extractOpt[String].map(_ endsWith "$").getOrElse(false) =>
val className = json.extract[String]
Class.forName(className).getField("MODULE$").get().asInstanceOf[T]
}
def serialize(implicit format: Formats) = {
case possibleSingleton if SingletonClass.isInstance(possibleSingleton) && possibleSingleton.getClass.getName().endsWith("$") =>
possibleSingleton.getClass.getName()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment