Skip to content

Commit

Permalink
fix(num): preserve num-types in ast (zio#747)
Browse files Browse the repository at this point in the history
  • Loading branch information
ThijsBroersen authored Oct 13, 2022
1 parent 07982a7 commit 73523a5
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 10 deletions.
12 changes: 6 additions & 6 deletions zio-json/shared/src/main/scala/zio/json/JsonEncoder.scala
Original file line number Diff line number Diff line change
Expand Up @@ -193,18 +193,18 @@ object JsonEncoder extends GeneratedTupleEncoders with EncoderLowPriority1 {

implicit val boolean: JsonEncoder[Boolean] = explicit(_.toString, Json.Bool.apply)
implicit val symbol: JsonEncoder[Symbol] = string.contramap(_.name)
implicit val byte: JsonEncoder[Byte] = explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n.toInt)))
implicit val short: JsonEncoder[Short] = explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n.toInt)))
implicit val int: JsonEncoder[Int] = explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n)))
implicit val long: JsonEncoder[Long] = explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n)))
implicit val byte: JsonEncoder[Byte] = explicit(_.toString, n => Json.Num(n))
implicit val short: JsonEncoder[Short] = explicit(_.toString, n => Json.Num(n))
implicit val int: JsonEncoder[Int] = explicit(_.toString, n => Json.Num(n))
implicit val long: JsonEncoder[Long] = explicit(_.toString, n => Json.Num(n))
implicit val bigInteger: JsonEncoder[java.math.BigInteger] =
explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n)))
implicit val scalaBigInt: JsonEncoder[BigInt] =
explicit(_.toString, n => Json.Num(new java.math.BigDecimal(n.bigInteger)))
implicit val double: JsonEncoder[Double] =
explicit(SafeNumbers.toString, n => Json.Num(new java.math.BigDecimal(n)))
explicit(SafeNumbers.toString, n => Json.Num(n))
implicit val float: JsonEncoder[Float] =
explicit(SafeNumbers.toString, n => Json.Num(new java.math.BigDecimal(n.toDouble)))
explicit(SafeNumbers.toString, n => Json.Num(n))
implicit val bigDecimal: JsonEncoder[java.math.BigDecimal] = explicit(_.toString, Json.Num.apply)
implicit val scalaBigDecimal: JsonEncoder[BigDecimal] = explicit(_.toString, n => Json.Num(n.bigDecimal))

Expand Down
2 changes: 1 addition & 1 deletion zio-json/shared/src/main/scala/zio/json/ast/ast.scala
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ object Json {
def apply(value: Int): Num = Num(BigDecimal(value).bigDecimal)
def apply(value: Long): Num = Num(BigDecimal(value).bigDecimal)
def apply(value: BigDecimal): Num = Num(value.bigDecimal)
def apply(value: Float): Num = Num(BigDecimal(value.toDouble).bigDecimal)
def apply(value: Float): Num = Num(BigDecimal(value).bigDecimal)
def apply(value: Double): Num = Num(BigDecimal(value).bigDecimal)

implicit val decoder: JsonDecoder[Num] = new JsonDecoder[Num] {
Expand Down
6 changes: 3 additions & 3 deletions zio-json/shared/src/test/scala/zio/json/EncoderSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -332,8 +332,8 @@ object EncoderSpec extends ZIOSpecDefault {
assert((1: Int).toJsonAST)(isRight(equalTo(Json.Num(1)))) &&
assert(1L.toJsonAST)(isRight(equalTo(Json.Num(1)))) &&
assert(new java.math.BigInteger("1").toJsonAST)(isRight(equalTo(Json.Num(1)))) &&
assert(1.0f.toJsonAST)(isRight(equalTo(Json.Num(1)))) &&
assert(1.0d.toJsonAST)(isRight(equalTo(Json.Num(1))))
assert(1.0f.toJsonAST)(isRight(equalTo(Json.Num(1.0f)))) &&
assert(1.0d.toJsonAST)(isRight(equalTo(Json.Num(1.0))))
}
),
test("options") {
Expand Down Expand Up @@ -379,7 +379,7 @@ object EncoderSpec extends ZIOSpecDefault {

assert(OnlyString("foo").toJsonAST)(isRight(equalTo(Json.Obj("s" -> Json.Str("foo"))))) &&
assert(CoupleOfThings(-1, Some(10.0f), false).toJsonAST)(
isRight(equalTo(Json.Obj("j" -> Json.Num(-1), "f" -> Json.Num(10), "b" -> Json.Bool(false))))
isRight(equalTo(Json.Obj("j" -> Json.Num(-1), "f" -> Json.Num(10.0f), "b" -> Json.Bool(false))))
) &&
assert(CoupleOfThings(0, None, true).toJsonAST)(
isRight(equalTo(Json.Obj("j" -> Json.Num(0), "b" -> Json.Bool(true))))
Expand Down

0 comments on commit 73523a5

Please sign in to comment.