mirror of https://github.com/sbt/sbt.git
Simplify JValueFormat
This commit is contained in:
parent
6211e8d7da
commit
875cf6f4dc
|
|
@ -8,31 +8,15 @@ import sjsonnew.{ JsonWriter => JW, JsonReader => JR, JsonFormat => JF, _ }
|
|||
import scala.json.ast.unsafe._
|
||||
|
||||
trait JValueFormat { self: sjsonnew.BasicJsonProtocol =>
|
||||
/** Define a JsonWriter for the type T wrapper of underlying type U given JsonWriter[U] and T => U. */
|
||||
def unlift[T, U](unlift: T => U)(implicit z: JW[U]): JW[T] = new JW[T] {
|
||||
def write[J](w: T, b: Builder[J]) = z.write(unlift(w), b)
|
||||
implicit val JNullJF: JF[JNull.type] = new JF[JNull.type] {
|
||||
def write[J](x: JNull.type, b: Builder[J]) = b.writeNull()
|
||||
def read[J](j: Option[J], u: Unbuilder[J]) = JNull
|
||||
}
|
||||
|
||||
/** Define a JsonReader for the type T wrapper of underlying type U given JsonReader[U] and U => T. */
|
||||
def lift[T, U](lift: U => T)(implicit z: JR[U]): JR[T] = new JR[T] {
|
||||
def read[J](j: Option[J], u: Unbuilder[J]): T = lift(z.read(j, u))
|
||||
}
|
||||
|
||||
@inline def ?[A](implicit z: A): A = z
|
||||
|
||||
implicit val JNullJW: JW[JNull.type] = new JW[JNull.type] { def write[J](x: JNull.type, b: Builder[J]) = b.writeNull() }
|
||||
implicit val JNullJR: JR[JNull.type] = new JR[JNull.type] { def read[J](j: Option[J], u: Unbuilder[J]) = JNull }
|
||||
|
||||
implicit val JBooleanJW: JW[JBoolean] = unlift(_.get)
|
||||
implicit val JBooleanJR: JR[JBoolean] = lift(JBoolean(_))
|
||||
|
||||
implicit val JStringJW: JW[JString] = unlift(_.value)
|
||||
implicit val JStringJR: JR[JString] = lift(JString(_))
|
||||
|
||||
implicit val JNumberJW: JW[JNumber] = unlift(x => BigDecimal(x.value))
|
||||
implicit val JNumberJR: JR[JNumber] = lift((x: BigDecimal) => JNumber(x.toString))
|
||||
|
||||
implicit lazy val JArrayJW: JW[JArray] = unlift[JArray, Array[JValue]](_.value)
|
||||
implicit val JBooleanJF: JF[JBoolean] = project(_.get, JBoolean(_))
|
||||
implicit val JStringJF: JF[JString] = project(_.value, JString(_))
|
||||
implicit val JNumberJF: JF[JNumber] = project(x => BigDecimal(x.value), (x: BigDecimal) => JNumber(x.toString))
|
||||
implicit val JArrayJF: JF[JArray] = project[JArray, Array[JValue]](_.value, JArray(_))
|
||||
|
||||
implicit lazy val JObjectJW: JW[JObject] = new JW[JObject] {
|
||||
def write[J](x: JObject, b: Builder[J]) = {
|
||||
|
|
@ -44,12 +28,12 @@ trait JValueFormat { self: sjsonnew.BasicJsonProtocol =>
|
|||
|
||||
implicit lazy val JValueJW: JW[JValue] = new JW[JValue] {
|
||||
def write[J](x: JValue, b: Builder[J]) = x match {
|
||||
case x: JNull.type => ?[JW[JNull.type]].write(x, b)
|
||||
case x: JBoolean => ?[JW[JBoolean]].write(x, b)
|
||||
case x: JString => ?[JW[JString]].write(x, b)
|
||||
case x: JNumber => ?[JW[JNumber]].write(x, b)
|
||||
case x: JObject => ?[JW[JObject]].write(x, b)
|
||||
case x: JArray => ?[JW[JArray]].write(x, b)
|
||||
case x: JNull.type => JNullJF.write(x, b)
|
||||
case x: JBoolean => JBooleanJF.write(x, b)
|
||||
case x: JString => JStringJF.write(x, b)
|
||||
case x: JNumber => JNumberJF.write(x, b)
|
||||
case x: JArray => JArrayJF.write(x, b)
|
||||
case x: JObject => JObjectJW.write(x, b)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue