Table of Contents
Quickstart 🔗
Scastie 🔗
Quickest way to start playing with Tupson is with this Scastie example.
Mill 🔗
def mvnDeps = super.mvnDeps() ++ Seq(
mvn"ba.sake::tupson:0.20.0"
)
def scalacOptions = super.scalacOptions() ++ Seq("-Yretain-trees")
Sbt 🔗
libraryDependencies ++= Seq(
"ba.sake" %% "tupson" % "0.20.0"
)
scalacOptions ++= Seq("-Yretain-trees")
Scala CLI 🔗
//> using dep ba.sake::tupson:0.20.0
Examples 🔗
Examples are runnable with Mill:
./mill examples.runMain write
Generic derives 🔗
Parameterized products and sums can derive JsonRW too:
import ba.sake.tupson.{*, given}
case class Gen[T](value: T) derives JsonRW
case class Box[T](gen: Gen[T]) derives JsonRW
sealed trait Expr[T] derives JsonRW
case class Const[T](value: T) extends Expr[T]
case class Add[T](left: Expr[T], right: Expr[T]) extends Expr[T]
Note: this covers parameterized ADTs. Full true-GADT case refinements still require manual codecs.