Automatic argonaut codec derivation with shapeless
Add to your build.sbt
resolvers += Resolver.sonatypeRepo("releases")
libraryDependencies +=
"com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "0.1.0"
If you are using scala 2.10.x, also add the macro paradise plugin to your build,
libraryDependencies +=
compilerPlugin("org.scalamacros" % "paradise" % "2.0.1" cross CrossVersion.full)
Then import the content of argonaut.Shapeless
along with the one of argonaut.Argonaut
close to where you want codecs to be automatically available for case classes / sealed hierarchies:
import argonaut._, Argonaut._, Shapeless._
// If you defined:
// case class Foo(i: Int, s: String, blah: Boolean)
// case class Bar(foo: Foo, other: String)
// sealed trait Base
// case class BaseIntString(i: Int, s: String) extends Base
// case class BaseDoubleBoolean(d: Double, b: Boolean) extends Base
// then you can now do
implicitly[EncodeJson[Foo]]
implicitly[EncodeJson[Bar]]
implicitly[EncodeJson[Base]]
implicitly[DecodeJson[Foo]]
implicitly[DecodeJson[Bar]]
implicitly[DecodeJson[Base]]
For the development version, add instead to your build.sbt
,
resolvers += Resolver.sonatypeRepo("snapshots")
libraryDependencies +=
"com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "0.1.1-SHAPSHOT"
(Macro paradise plugin also necessary with scala 2.10, see above.)
Available for scala 2.10 and 2.11. Uses argonaut 6.1-M5 and shapeless 2.1.0-RC1.
Released under the BSD license. See LICENSE file for more details.
Based on an early (non Lazy
-based) automatic codec derivation in argonaut
by Maxwell Swadling,
Travis Brown, and
Mark Hibberd.