Enhance the ability to create writes and reads from complex case classes graph.
Add into your build.sbt
the following lines:
resolvers += "null-vector" at "https://nullvector.jfrog.io/artifactory/releases"
libraryDependencies += "null-vector" %% "play-json-mapping" % "<version>"
This example use the same model using in play-json examples:
import play.api.libs.json._
import org.nullvector.JsonMapper._
case class Location(lat: Double, long: Double)
case class Resident(name: String, age: Int, role: Option[String])
case class Place(name: String, centerLocation: Location, residents: Seq[Resident])
implicit val w: Writes[Place] = writesOf[Place]
implicit val r: Reads[Place] = readsOf[Place]
//or just:
implicit val m: Format[Place] = mappingOf[Place]
And use as follow:
val place = Place(
"Watership Down",
Location(51.235685, -1.309197),
Seq(
Resident("Fiver", 4, None),
Resident("Bigwig", 6, Some("Owsla"))
)
)
val json: JsValue = place.asJson
Scala Enumerations are also automatic mapping:
case class Money(amount: BigDecimal, currency: Money.Currency)
object Money extends Enumeration {
type Currency = Value
val ARS, BRL, USD, MXN = Value
}
...
implicit val moneyMapping: Format[Money] = JsonMapper.mappingOf[Money]