From fc7aedf1b472b2cde492959d52a508bbb68cf153 Mon Sep 17 00:00:00 2001 From: Tom Patterer Date: Mon, 7 Nov 2022 14:22:02 +0100 Subject: [PATCH] Test with upickle --- build.sbt | 3 ++- .../scoverage/samples/CustomPicklers.scala | 25 +++++++++++++++++++ .../org/scoverage/samples/UpickleStuff.scala | 16 ++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/main/scala/org/scoverage/samples/CustomPicklers.scala create mode 100644 src/main/scala/org/scoverage/samples/UpickleStuff.scala diff --git a/build.sbt b/build.sbt index 33b311e..505d5e8 100644 --- a/build.sbt +++ b/build.sbt @@ -16,7 +16,8 @@ libraryDependencies ++= Seq( "commons-io" % "commons-io" % "2.11.0", "com.typesafe.akka" %% "akka-actor" % "2.6.20", "com.typesafe.akka" %% "akka-testkit" % "2.6.20" % "test", - "org.scalatest" %% "scalatest" % "3.2.14" % "test" + "org.scalatest" %% "scalatest" % "3.2.14" % "test", + "com.lihaoyi" %% "upickle" % "2.0.0" ) import org.scoverage.coveralls.Imports.CoverallsKeys._ diff --git a/src/main/scala/org/scoverage/samples/CustomPicklers.scala b/src/main/scala/org/scoverage/samples/CustomPicklers.scala new file mode 100644 index 0000000..00dae2e --- /dev/null +++ b/src/main/scala/org/scoverage/samples/CustomPicklers.scala @@ -0,0 +1,25 @@ +package org.scoverage.samples + +import upickle._ + +/** + * Json boilerplate. + * - Parse null and missing objects into scala Options + */ +object CustomPicklers { + + object OptionPickler extends upickle.AttributeTagged { + override implicit def OptionWriter[T: Writer]: Writer[Option[T]] = + implicitly[Writer[T]].comap[Option[T]] { + case None => null.asInstanceOf[T] + case Some(x) => x + } + + override implicit def OptionReader[T: Reader]: Reader[Option[T]] = { + new Reader.Delegate[Any, Option[T]](implicitly[Reader[T]].map(Some(_))) { + override def visitNull(index: Int) = None + } + } + } + +} diff --git a/src/main/scala/org/scoverage/samples/UpickleStuff.scala b/src/main/scala/org/scoverage/samples/UpickleStuff.scala new file mode 100644 index 0000000..c759fa5 --- /dev/null +++ b/src/main/scala/org/scoverage/samples/UpickleStuff.scala @@ -0,0 +1,16 @@ +package org.scoverage.samples + +import org.scoverage.samples.CustomPicklers.OptionPickler.{ + ReadWriter => RW, + macroRW +} + +object UpickleStuff { + case class Person( + name: String + ) + + object Person { + implicit val rw: RW[Person] = macroRW + } +}