play-json-sealed
statement
This project is meant as an extension for the Json.format macro in the JSON library of the play framework which generates automatic JSON serializers. It provides a new macro AutoFormat which supports sealed trait types and falls back to the original macro for other types.
It is released under the GNU Lesser General Public License v2.1+ and comes with absolutely no warranties. It might be submitted to Play at some point. To contact the author, send an email to contact at sciss.de.
requirements / installation
This project currently compiles against Scala 2.12, 2.11, 2.10 using sbt 0.13.
To use the library in your project:
"de.sciss" %% "play-json-sealed" % v
The current version v is "0.4.1", corresponding with play-json version 2.3.10 for Scala 2.10 and 2.11, the
last to support Java 6 and 7. We are using play-json version 2.6.0-M1 as the only available version published for Scala 2.12,
where Java 8 is already mandatory.
contributing
Please see the file CONTRIBUTING.md
example
Examples are provided by way of test sources (sbt test). Basically you get a format via AutoFormat[A]. If that trait requires formats for other traits, you need to put their respective formats implicitly in scope, first. There are also a few useful formats in Formats:
FileFormatforjava.io.FileTuple2Formatfor anyTuple2, given that its type parameters have implicit formatsVecFormatfor acollection.immutable.IndexedSeq, given that its element type has an implicit formatOptionFormatfor anyOption- this was stupidly removed from Play-JSON in 2.4.x.
limitations and issues
- Recursive types are not yet possible (see
RecursiveTest). - There is a scoping issue. If you have
object Foo { case class Bar(i: Int) }, then you need to import theBarsymbol for the macros to work. E.g.Json.format[Foo.Bar]fails, whereasimport Foo.Bar; Json.format[Bar]works.