diff --git a/build.sbt b/build.sbt index 992277e..f0ee122 100644 --- a/build.sbt +++ b/build.sbt @@ -64,7 +64,7 @@ mkNotebooks := (Def.inputTaskDyn { // Build Config // ------- -lazy val circeVersion = "0.7.0" +lazy val circeVersion = "0.9.0" lazy val commonSettings = Seq( description := "The missing matplotlib for Scala and Spark", diff --git a/core/src/main/scala/vegas/spec/Spec.scala b/core/src/main/scala/vegas/spec/Spec.scala index 9547afa..4ab4c4b 100644 --- a/core/src/main/scala/vegas/spec/Spec.scala +++ b/core/src/main/scala/vegas/spec/Spec.scala @@ -992,31 +992,29 @@ object Spec { import cats.syntax.either._; import io.circe._; import io.circe.syntax._; - def anyEncoder: Encoder[Any] = Encoder.instance(((a: Any) => a match { - case null => Json.Null - case (b @ ((_): Boolean)) => b.asJson - case (b @ ((_): Byte)) => b.asJson - case (s @ ((_): Short)) => s.asJson - case (i @ ((_): Int)) => i.asJson - case (l @ ((_): Long)) => l.asJson - case (f @ ((_): Float)) => f.asJson - case (d @ ((_): Double)) => d.asJson - case (s @ ((_): String)) => s.asJson - case (a @ ((_): Array[Boolean] @unchecked)) => a.asJson - case (a @ ((_): Array[Byte] @unchecked)) => a.asJson - case (a @ ((_): Array[Short] @unchecked)) => a.asJson - case (a @ ((_): Array[Int] @unchecked)) => a.asJson - case (a @ ((_): Array[Long] @unchecked)) => a.asJson - case (a @ ((_): Array[Float] @unchecked)) => a.asJson - case (a @ ((_): Array[Double] @unchecked)) => a.asJson - case (s @ ((_): Array[Any] @unchecked)) => s.asJson(Encoder.encodeTraversableOnce(anyEncoder, - implicitly)) - case (s @ ((_): Seq[Any] @unchecked)) => s.asJson(Encoder.encodeTraversableOnce(anyEncoder, - implicitly)) - case (ma @ ((_): Map[String, - Any] @unchecked)) => ma.asJson(Encoder.encodeMapLike(KeyEncoder.encodeKeyString, - anyEncoder)) + def anyEncoder: Encoder[Any] = Encoder.instance( + ((a: Any) => a match { + case null => Json.Null + case (b @ ((_): Boolean)) => b.asJson + case (b @ ((_): Byte)) => b.asJson + case (s @ ((_): Short)) => s.asJson + case (i @ ((_): Int)) => i.asJson + case (l @ ((_): Long)) => l.asJson + case (f @ ((_): Float)) => f.asJson + case (d @ ((_): Double)) => d.asJson + case (s @ ((_): String)) => s.asJson + case (a @ ((_): Array[Boolean] @unchecked)) => a.asJson + case (a @ ((_): Array[Byte] @unchecked)) => a.asJson + case (a @ ((_): Array[Short] @unchecked)) => a.asJson + case (a @ ((_): Array[Int] @unchecked)) => a.asJson + case (a @ ((_): Array[Long] @unchecked)) => a.asJson + case (a @ ((_): Array[Float] @unchecked)) => a.asJson + case (a @ ((_): Array[Double] @unchecked)) => a.asJson + case (s @ ((_): Array[Any] @unchecked)) => s.toSeq.asJson(Encoder.encodeSeq(anyEncoder)) + case (s @ ((_): Seq[Any] @unchecked)) => s.asJson(Encoder.encodeSeq(anyEncoder)) + case (ma @ ((_): Map[String, Any] @unchecked)) => ma.asJson(Encoder.encodeMapLike(KeyEncoder.encodeKeyString, anyEncoder, implicitly)) })); + def anyDecoder: Decoder[Any] = Decoder.instance(((h: HCursor) => h.focus.get match { case (n @ _) if n.isNull => null case (n @ _) if n.isNumber => n.as[Double] @@ -1026,8 +1024,7 @@ object Spec { Any]](Decoder.decodeMapLike(KeyDecoder.decodeKeyString, anyDecoder, Map.canBuildFrom)) - case (a @ _) if a.isArray => a.as[List[Any]](Decoder.decodeCanBuildFrom(anyDecoder, - List.canBuildFrom[Any])) + case (a @ _) if a.isArray => a.as[List[Any]](Decoder.decodeTraversable(anyDecoder, List.canBuildFrom[Any])) })); implicit val SpecExtendedUnitSpecEncoder: Encoder[Spec.ExtendedUnitSpec] = Encoder.instance(((cc: Spec.ExtendedUnitSpec) => Json.obj("width".->(cc.width.asJson), "height".->(cc.height.asJson), @@ -1038,6 +1035,7 @@ object Spec { "data".->(cc.data.asJson), "transform".->(cc.transform.asJson), "config".->(cc.config.asJson)))); + implicit val SpecExtendedUnitSpecDecoder: Decoder[Spec.ExtendedUnitSpec] = Decoder.instance(((c: HCursor) => c.downField("width").as[Option[Double]] .flatMap(((width) => c.downField("height").as[Option[Double]] .flatMap(((height) => c.downField("mark").as[Mark] diff --git a/core/src/main/scala/vegas/spec/package.scala b/core/src/main/scala/vegas/spec/package.scala index 9c777f8..d42bac5 100644 --- a/core/src/main/scala/vegas/spec/package.scala +++ b/core/src/main/scala/vegas/spec/package.scala @@ -8,7 +8,7 @@ import vegas.spec.Spec._ * @author Aish Fenton. */ package object spec { - val DropNullJsonPrinter = Printer.spaces2.copy(dropNullKeys = true) + val DropNullJsonPrinter = Printer.spaces2.copy(dropNullValues = true) def toJson[T : Encoder](spec: T) = { spec.asJson.pretty(DropNullJsonPrinter)