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.