The way play-json is intended to be used, best I can tell, is
that you define only Reads and Writes, and let Format get created
implicitly from those. If you define a Format then any attempt
to have a Reads becomes ambiguous.
We were also not using some of the generic Reads and Writes
instances that we could have used, so got rid of some
duplicated serializers we don't need anymore.
Also changed to define only Map[File, T] serializer, rather than
generic Map[A,B], and the same for Relation. This allows us
to use a plain JSON dictionary and the Map[String,T] serializer
already provided by Play.
Split out some of the serializers to a private GenericSerializers
object, which both makes them private, and also fixes some
initialization order problems.
The way play-json is intended to be used, best I can tell, is that you define only Reads and Writes, and let Format get created implicitly from those. If you define a Format then any attempt to have a Reads becomes ambiguous.
We were also not using some of the generic Reads and Writes instances that we could have used, so got rid of some duplicated serializers we don't need anymore.
Also changed to define only Map[File, T] serializer, rather than generic Map[A,B], and the same for Relation. This allows us to use a plain JSON dictionary and the Map[String,T] serializer already provided by Play.
Split out some of the serializers to a private GenericSerializers object, which both makes them private, and also fixes some initialization order problems.