diff --git a/benchmarks/src/main/scala/io/bullet/borer/benchmarks/JsoniterScalaDefinitions.scala b/benchmarks/src/main/scala/io/bullet/borer/benchmarks/JsoniterScalaDefinitions.scala index 22309d55..e311f64c 100644 --- a/benchmarks/src/main/scala/io/bullet/borer/benchmarks/JsoniterScalaDefinitions.scala +++ b/benchmarks/src/main/scala/io/bullet/borer/benchmarks/JsoniterScalaDefinitions.scala @@ -59,36 +59,45 @@ class JsoniterScalaModelBenchmark extends DomBenchmark { private var codec: JsonValueCodec[Product] = _ - def nullable[T: JsonValueCodec: Default]: JsonValueCodec[Nullable[T]] = { - new JsonValueCodec[Nullable[T]] { - override def decodeValue(in: JsonReader, default: Nullable[T]): Nullable[T] = - if (in.isNextToken('n')) in.readNullOrError(default, "expected JSON value or null") - else { - in.rollbackToken() - implicitly[JsonValueCodec[T]].decodeValue(in, default.value) - } - - override def encodeValue(x: Nullable[T], out: JsonWriter): Unit = - if (x.value == null) out.writeNull() - else implicitly[JsonValueCodec[T]].encodeValue(x.value, out) - - override def nullValue: Nullable[T] = new Nullable(Default.get[T]) - } - } + implicit val nullableDoubleCodec: JsonValueCodec[Nullable[Double]] = new JsonValueCodec[Nullable[Double]] { + override def decodeValue(in: JsonReader, default: Nullable[Double]): Nullable[Double] = + if (in.isNextToken('n')) in.readNullOrError(default, "expected Double or Null") + else { + in.rollbackToken() + in.readDouble() + } + + override def encodeValue(x: Nullable[Double], out: JsonWriter): Unit = out.writeVal(x.value) - implicit val nullableDoubleCodec: JsonValueCodec[Nullable[Double]] = { - implicit val c: JsonValueCodec[Double] = JsonCodecMaker.make(CodecMakerConfig()) - nullable[Double] + override val nullValue: Nullable[Double] = new Nullable(Default.get[Double]) } - implicit val nullableIntCodec: JsonValueCodec[Nullable[Int]] = { - implicit val c: JsonValueCodec[Int] = JsonCodecMaker.make(CodecMakerConfig()) - nullable[Int] + implicit val nullableIntCodec: JsonValueCodec[Nullable[Int]] = new JsonValueCodec[Nullable[Int]] { + override def decodeValue(in: JsonReader, default: Nullable[Int]): Nullable[Int] = + if (in.isNextToken('n')) in.readNullOrError(default, "expected Int or Null") + else { + in.rollbackToken() + new Nullable(in.readInt()) + } + + override def encodeValue(x: Nullable[Int], out: JsonWriter): Unit = out.writeVal(x.value) + + override val nullValue: Nullable[Int] = new Nullable(Default.get[Int]) } - implicit val nullableStringCodec: JsonValueCodec[Nullable[String]] = { - implicit val c: JsonValueCodec[String] = JsonCodecMaker.make(CodecMakerConfig()) - nullable[String] + implicit val nullableStringCodec: JsonValueCodec[Nullable[String]] = new JsonValueCodec[Nullable[String]] { + override def decodeValue(in: JsonReader, default: Nullable[String]): Nullable[String] = + if (in.isNextToken('n')) in.readNullOrError(default, "expected Int or Null") + else { + in.rollbackToken() + new Nullable(in.readString(null)) + } + + override def encodeValue(x: Nullable[String], out: JsonWriter): Unit = + if (x.value == null) out.writeNull() + else out.writeVal(x.value) + + override val nullValue: Nullable[String] = new Nullable(Default.get[String]) } def setup(): Unit = {