src/Pure/General/json.scala
changeset 67842 ff87225e7e8e
parent 67841 8ada8f6d9495
child 67843 ff561f6e0a8e
equal deleted inserted replaced
67841:8ada8f6d9495 67842:ff87225e7e8e
   230       result.toString
   230       result.toString
   231     }
   231     }
   232   }
   232   }
   233 
   233 
   234 
   234 
   235   /* numbers */
   235   /* values */
   236 
   236 
   237   object Number
   237   object Value
   238   {
   238   {
       
   239     object String {
       
   240       def unapply(json: T): Option[java.lang.String] =
       
   241         json match {
       
   242           case x: java.lang.String => Some(x)
       
   243           case _ => None
       
   244         }
       
   245     }
       
   246 
   239     object Double {
   247     object Double {
   240       def unapply(json: T): Option[scala.Double] =
   248       def unapply(json: T): Option[scala.Double] =
   241         json match {
   249         json match {
   242           case x: scala.Double => Some(x)
   250           case x: scala.Double => Some(x)
   243           case x: scala.Long => Some(x.toDouble)
   251           case x: scala.Long => Some(x.toDouble)
   260       def unapply(json: T): Option[scala.Int] =
   268       def unapply(json: T): Option[scala.Int] =
   261         json match {
   269         json match {
   262           case x: scala.Double if x.toInt.toDouble == x => Some(x.toInt)
   270           case x: scala.Double if x.toInt.toDouble == x => Some(x.toInt)
   263           case x: scala.Long if x.toInt.toLong == x => Some(x.toInt)
   271           case x: scala.Long if x.toInt.toLong == x => Some(x.toInt)
   264           case x: scala.Int => Some(x)
   272           case x: scala.Int => Some(x)
       
   273           case _ => None
       
   274         }
       
   275     }
       
   276 
       
   277     object Boolean {
       
   278       def unapply(json: T): Option[scala.Boolean] =
       
   279         json match {
       
   280           case x: scala.Boolean => Some(x)
   265           case _ => None
   281           case _ => None
   266         }
   282         }
   267     }
   283     }
   268   }
   284   }
   269 
   285 
   300       a = a0.map(unapply(_))
   316       a = a0.map(unapply(_))
   301       if a.forall(_.isDefined)
   317       if a.forall(_.isDefined)
   302     } yield a.map(_.get)
   318     } yield a.map(_.get)
   303 
   319 
   304   def string(obj: T, name: String): Option[String] =
   320   def string(obj: T, name: String): Option[String] =
   305     value(obj, name) match {
   321     value(obj, name, Value.String.unapply)
   306       case Some(x: String) => Some(x)
       
   307       case _ => None
       
   308     }
       
   309 
   322 
   310   def double(obj: T, name: String): Option[Double] =
   323   def double(obj: T, name: String): Option[Double] =
   311     value(obj, name, Number.Double.unapply)
   324     value(obj, name, Value.Double.unapply)
   312 
   325 
   313   def long(obj: T, name: String): Option[Long] =
   326   def long(obj: T, name: String): Option[Long] =
   314     value(obj, name, Number.Long.unapply)
   327     value(obj, name, Value.Long.unapply)
   315 
   328 
   316   def int(obj: T, name: String): Option[Int] =
   329   def int(obj: T, name: String): Option[Int] =
   317     value(obj, name, Number.Int.unapply)
   330     value(obj, name, Value.Int.unapply)
   318 
   331 
   319   def bool(obj: T, name: String): Option[Boolean] =
   332   def bool(obj: T, name: String): Option[Boolean] =
   320     value(obj, name) match {
   333     value(obj, name, Value.Boolean.unapply)
   321       case Some(x: Boolean) => Some(x)
       
   322       case _ => None
       
   323     }
       
   324 }
   334 }