All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sjsonnew.support.spray.Converter.scala Maven / Gradle / Ivy

package sjsonnew
package support.spray

import spray.json.{ deserializationError => _, _ }

object Converter extends SupportConverter[JsValue] {
  val facade: Facade[JsValue] = FacadeImpl
  private object FacadeImpl extends SimpleFacade[JsValue] {
    def jnull() = JsNull
    def jfalse() = JsFalse
    def jtrue() = JsTrue
    def jdouble(d: Double) = JsNumber(d)
    def jnumstring(s: String) = JsNumber(s)
    def jbigdecimal(d: BigDecimal) = JsNumber(d)
    def jintstring(s: String) = JsNumber(s)
    def jint(i: Int) = JsNumber(i)
    def jlong(l: Long) = JsNumber(l)
    def jstring(s: String) = JsString(s)
    def jarray(vs: List[JsValue]) = JsArray(vs: _*)
    def jobject(vs: Map[String, JsValue]) = JsObject(vs)
    def isJnull(value: JsValue): Boolean =
      value match {
        case JsNull => true
        case _      => false
      }

    def isObject(value: JsValue): Boolean =
      value match {
        case JsObject(_) => true
        case _           => false
      }
    def extractInt(value: JsValue): Int =
      value match {
        case JsNumber(x) => x.intValue
        case x => deserializationError("Expected Int as JsNumber, but got " + x)
      }
    def extractLong(value: JsValue): Long =
      value match {
        case JsNumber(x) => x.longValue
        case x => deserializationError("Expected Long as JsNumber, but got " + x)
      }
    def extractFloat(value: JsValue): Float =
      value match {
        case JsNumber(x) => x.floatValue
        case JsNull      => Float.NaN
        case x => deserializationError("Expected Float as JsNumber, but got " + x)
      }
    def extractDouble(value: JsValue): Double =
      value match {
        case JsNumber(x) => x.doubleValue
        case JsNull      => Double.NaN
        case x => deserializationError("Expected Double as JsNumber, but got " + x)
      }
    def extractBigDecimal(value: JsValue): BigDecimal =
      value match {
        case JsNumber(x) => x
        case x => deserializationError("Expected BigDecimal as JsNumber, but got " + x)
      }
    def extractBoolean(value: JsValue): Boolean =
      value match {
        case JsTrue => true
        case JsFalse => false
        case x => deserializationError("Expected JsBoolean, but got " + x)
      }
    def extractString(value: JsValue): String =
      value match {
        case JsString(x) => x
        case x => deserializationError("Expected String as JsString, but got " + x)
      }
    def extractArray(value: JsValue): Vector[JsValue] =
      value match {
        case JsArray(elements) => elements
        case JsNull            => Vector.empty
        case x => deserializationError("Expected List as JsArray, but got " + x)
      }
    def extractObject(value: JsValue): (Map[String, JsValue], Vector[String]) =
      value match {
        case x: JsObject =>
          val fields = x.fields
          val vectorBuilder = Vector.newBuilder[String]
          for (field <- fields) {
            vectorBuilder += field._1
          }
          (fields, vectorBuilder.result())
        case JsNull => (Map.empty, Vector.empty)
        case x => deserializationError("Expected Map as JsObject, but got " + x)
      }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy