- Talk: https://www.youtube.com/watch?v=dKblZynnhgo
- Slides: https://nicolasstucki.github.io/scala-days-2023/
This is a normal sbt project. You can compile code with sbt compile
, test it with sbt test
, and sbt console
will start a Scala 3 REPL.
type Json = JsonObject | JsonArray | Double | String | Boolean | Null
The string interpolator json
defined in JsonStringContext.scala provides shows how to implement the interpolator apply
and unapply
with macros.
val user = json"""{
"firstName": "John",
"lastName": "Doe"
}"""
val bool = json"true"
val account = json"""{
"user": $user,
"active": $bool
}"""
where the type of account
is refined to
account: JsonObject {
val user: JsonObject {
val firstName: String
val lastName:String
}
val active: Boolean
}
(account: Json) match
case json"""{ "user": $x, "active": true }""" => println(x + " is active")
case _ =>