Skip to content

Commit

Permalink
Add benchmarks for jsoniter-scala
Browse files Browse the repository at this point in the history
  • Loading branch information
plokhotnyuk committed May 12, 2019
1 parent 4999a50 commit 7d4cd31
Showing 1 changed file with 34 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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 = {
Expand Down

0 comments on commit 7d4cd31

Please sign in to comment.