Automatic argonaut codec derivation with shapeless
Add to your build.sbt
resolvers += Resolver.sonatypeRepo("releases")
libraryDependencies +=
"com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "0.2.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 ++= Seq(
Resolver.sonatypeRepo("releases"),
Resolver.sonatypeRepo("snapshots")
)
libraryDependencies +=
"com.github.alexarchambault" %% "argonaut-shapeless_6.1" % "0.3.0-SNAPSHOT"
(Macro paradise plugin also necessary with scala 2.10, see above.)
Available for scala 2.10 and 2.11. Uses argonaut 6.1 and shapeless 2.2.
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.