In [14]:
case class Dog(name: String, age: Int)
case class DogOwner(dog: Dog, name: String)


defined class Dog
defined class DogOwner
d: $user.Dog = Dog("Tyler", 15)
q: $user.DogOwner = DogOwner(Dog("Tyler", 15), "Frank")
res5_4: Int = 15

In [4]:
load.ivy("com.propensive" %% "rapture-core" % "1.1.0")
load.ivy("com.propensive" %% "rapture-json-jackson" % "1.1.0")


:: problems summary ::
:::: WARNINGS
	Unable to reparse com.github.alexarchambault.jupyter#jupyter-scala-api_2.11.6;0.2.0-SNAPSHOT from sonatype-snapshots, using Fri May 15 16:42:30 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault.jupyter#jupyter-scala-api_2.11.6;0.2.0-SNAPSHOT

	Unable to reparse com.github.alexarchambault#ammonite-api_2.11.6;0.3.1-SNAPSHOT from sonatype-snapshots, using Fri May 15 16:33:32 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault#ammonite-api_2.11.6;0.3.1-SNAPSHOT

	Unable to reparse com.github.alexarchambault.jupyter#jupyter-api_2.11;0.2.0-SNAPSHOT from sonatype-snapshots, using Fri May 15 07:53:31 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault.jupyter#jupyter-api_2.11;0.2.0-SNAPSHOT

:: problems summary ::
:::: WARNINGS
	Unable to reparse com.github.alexarchambault.jupyter#jupyter-scala-api_2.11.6;0.2.0-SNAPSHOT from sonatype-snapshots, using Fri May 15 16:42:30 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault.jupyter#jupyter-scala-api_2.11.6;0.2.0-SNAPSHOT

	Unable to reparse com.github.alexarchambault#ammonite-api_2.11.6;0.3.1-SNAPSHOT from sonatype-snapshots, using Fri May 15 16:33:32 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault#ammonite-api_2.11.6;0.3.1-SNAPSHOT

	Unable to reparse com.github.alexarchambault.jupyter#jupyter-api_2.11;0.2.0-SNAPSHOT from sonatype-snapshots, using Fri May 15 07:53:31 PDT 2015

	Choosing sonatype-snapshots for com.github.alexarchambault.jupyter#jupyter-api_2.11;0.2.0-SNAPSHOT



In [12]:
import rapture.json.jsonBackends.jackson._
import rapture.json._
import rapture.core._
import modes.returnTry
import formatters.humanReadable._


import rapture.json.jsonBackends.jackson._
import rapture.json._
import rapture.core._
import modes.returnTry
import formatters.humanReadable._

In [18]:
// case classes are working just fine...
val d = Dog("Tyler", 15)
val q = DogOwner(d, "Frank")
d.age


d: cmd7.INSTANCE.$ref$cmd5.Dog = Dog("Tyler", 15)
q: cmd7.INSTANCE.$ref$cmd5.DogOwner = DogOwner(Dog("Tyler", 15), "Frank")
res7_2: Int = 15

In [24]:
// I can serialize a dog...
val dogJS = Json(d).toString
val aDog = Json.parse(dogJS).as[Dog]


dogJS: java.lang.String = """
{"name":"Tyler","age":15}
"""
aDog: cmd11.INSTANCE.$ref$cmd9.Dog = Dog("Tyler", 15)

In [25]:
// Here, evaluating this fails, even though DogOwner is defined...
// Though the error says I need an implicit serializer, I don't need this in normal ammonite-repl or compiled program.
val dogOwnerJS = Json(q).toString
val dogOwner = Json.parse(dogOwnerJS).as[DogOwner]


Compilation Failed
Main.scala:81: Cannot serialize type cmd12.this.$ref$cmd9.DogOwner to rapture.json.Json. Please provide an implicit Serializer of type cmd12.this.$ref$cmd9.DogOwner.
              val dogOwnerJS = Json(q).toString ; val dogOwner = Json.parse(dogOwnerJS).as[DogOwner]
                                   ^

In [21]:
// However, if I define case-classes and values in same box, it works...

In [21]:
case class Dog(name: String, age: Int)
case class DogOwner(dog: Dog, name: String)
val d = Dog("Tyler", 15)
val q = DogOwner(d, "Frank")
val asJs = Json(q).toString
val parsed = Json.parse(asJs).as[DogOwner]
println(parsed)


DogOwner(Dog(Tyler,15),Frank)
defined class Dog
defined class DogOwner
d: $user.Dog = Dog("Tyler", 15)
q: $user.DogOwner = DogOwner(Dog("Tyler", 15), "Frank")
asJs: java.lang.String = """
{"dog":{"name":"Tyler","age":15},"name":"Frank"}
"""
parsed: $user.DogOwner = DogOwner(Dog("Tyler", 15), "Frank")

In [ ]: