summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMathias <mathias@spray.cc>2011-11-09 12:14:08 +0100
committerMathias <mathias@spray.cc>2011-11-09 12:40:16 +0100
commit9168e6ee3fd5f2366e66206a97144562aff70993 (patch)
tree129a7ac6ed4dc9d1ff5d0aa9d005ad544b37aa01 /src
parent6cbaa4c1782bcb4060af9f8ef2fd72e737f7982a (diff)
downloadspray-json-9168e6ee3fd5f2366e66206a97144562aff70993.tar.gz
spray-json-9168e6ee3fd5f2366e66206a97144562aff70993.tar.bz2
spray-json-9168e6ee3fd5f2366e66206a97144562aff70993.zip
Remove JsValue.apply method without replacement due to non-type-safety
Diffstat (limited to 'src')
-rw-r--r--src/main/scala/cc/spray/json/JsValue.scala46
-rw-r--r--src/main/scala/cc/spray/json/JsonParser.scala2
-rw-r--r--src/test/scala/cc/spray/json/CollectionFormatsSpec.scala2
-rw-r--r--src/test/scala/cc/spray/json/CompactPrinterSpec.scala4
-rw-r--r--src/test/scala/cc/spray/json/JsonParserSpec.scala4
-rw-r--r--src/test/scala/cc/spray/json/ProductFormatsSpec.scala14
-rw-r--r--src/test/scala/cc/spray/json/ReadmeSpec.scala2
7 files changed, 18 insertions, 56 deletions
diff --git a/src/main/scala/cc/spray/json/JsValue.scala b/src/main/scala/cc/spray/json/JsValue.scala
index 86d4101..cc1af91 100644
--- a/src/main/scala/cc/spray/json/JsValue.scala
+++ b/src/main/scala/cc/spray/json/JsValue.scala
@@ -33,45 +33,6 @@ sealed trait JsValue {
@deprecated("Superceded by 'convertTo'", "1.1.0")
def fromJson[T :JsonReader]: T = convertTo
}
-object JsValue {
-
- /**
- * General converter to a JsValue.
- * Throws an IllegalArgumentException if the given value cannot be converted.
- */
- def apply(value: Any): JsValue = value match {
- case null => JsNull
- case true => JsTrue
- case false => JsFalse
- case x: JsValue => x
- case x: String => JsString(x)
- case x: Int => JsNumber(x)
- case x: Long => JsNumber(x)
- case x: Double => JsNumber(x)
- case x: Char => JsString(String.valueOf(x))
- case x: Float => JsNumber(x)
- case x: Byte => JsNumber(x)
- case x: Short => JsNumber(x)
- case x: BigInt => JsNumber(x)
- case x: BigDecimal => JsNumber(x)
- case x: Symbol => JsString(x.name)
- case x: collection.Map[_, _] => JsObject(fromSeq(x))
- case x@ collection.Seq((_, _), _*) => JsObject(fromSeq(x.asInstanceOf[Seq[(_, _)]]))
- case x: collection.Seq[_] => JsArray(x.toList.map(JsValue.apply))
- case x => throw new IllegalArgumentException(x.toString + " cannot be converted to a JsValue")
- }
-
- private def fromSeq(seq: Iterable[(_, _)]) = {
- val list = ListBuffer.empty[JsField]
- seq.foreach {
- case (key: String, value) => list += JsField(key, JsValue(value))
- case (key: Symbol, value) => list += JsField(key.name, JsValue(value))
- case (key: JsString, value) => list += JsField(key.value, JsValue(value))
- case (x, _) => throw new IllegalArgumentException(x.toString + " cannot be converted to a JsString")
- }
- list.toList
- }
-}
/**
* A JSON object.
@@ -91,9 +52,6 @@ object JsObject {
* The members/fields of a JSON object.
*/
case class JsField(name: String, value: JsValue) extends JsValue
-object JsField {
- def apply(name: String, value: Any) = new JsField(name, JsValue(value))
-}
/**
* A JSON array.
@@ -108,6 +66,10 @@ object JsArray {
*/
case class JsString(value: String) extends JsValue
+object JsString {
+ def apply(value: Symbol) = new JsString(value.name)
+}
+
/**
* A JSON number.
*/
diff --git a/src/main/scala/cc/spray/json/JsonParser.scala b/src/main/scala/cc/spray/json/JsonParser.scala
index 4a2d64b..b93a9a6 100644
--- a/src/main/scala/cc/spray/json/JsonParser.scala
+++ b/src/main/scala/cc/spray/json/JsonParser.scala
@@ -40,7 +40,7 @@ object JsonParser extends Parser {
JsonString | JsonNumber | JsonObject | JsonArray | JsonTrue | JsonFalse | JsonNull
}
- def JsonString = rule { JsonStringUnwrapped ~~> JsString }
+ def JsonString = rule { JsonStringUnwrapped ~~> (JsString(_)) }
def JsonStringUnwrapped = rule { "\"" ~ Characters ~ "\" " ~~> (_.toString) }
diff --git a/src/test/scala/cc/spray/json/CollectionFormatsSpec.scala b/src/test/scala/cc/spray/json/CollectionFormatsSpec.scala
index 009d2e2..f5eafa8 100644
--- a/src/test/scala/cc/spray/json/CollectionFormatsSpec.scala
+++ b/src/test/scala/cc/spray/json/CollectionFormatsSpec.scala
@@ -29,7 +29,7 @@ class CollectionFormatsSpec extends Specification with DefaultJsonProtocol {
"The mapFormat" should {
val map = Map("a" -> 1, "b" -> 2, "c" -> 3)
- val json = JsObject(JsField("a", 1), JsField("b", 2), JsField("c", 3))
+ val json = JsObject(JsField("a", JsNumber(1)), JsField("b", JsNumber(2)), JsField("c", JsNumber(3)))
"convert a Map[String, Long] to a JsObject" in {
map.toJson mustEqual json
}
diff --git a/src/test/scala/cc/spray/json/CompactPrinterSpec.scala b/src/test/scala/cc/spray/json/CompactPrinterSpec.scala
index 3bc4870..f2d92fc 100644
--- a/src/test/scala/cc/spray/json/CompactPrinterSpec.scala
+++ b/src/test/scala/cc/spray/json/CompactPrinterSpec.scala
@@ -36,11 +36,11 @@ class CompactPrinterSpec extends Specification {
CompactPrinter(JsString("\"\\\b\f\n\r\t\u12AB")) mustEqual """"\"\\\b\f\n\r\t""" + "\\u12ab\""
}
"properly print a simple JsObject" in (
- CompactPrinter(JsObject(JsField("key", 42), JsField("key2", "value")))
+ CompactPrinter(JsObject(JsField("key", JsNumber(42)), JsField("key2", JsString("value"))))
mustEqual """{"key":42,"key2":"value"}"""
)
"properly print a simple JsArray" in (
- CompactPrinter(JsArray(JsNull, JsNumber(1.23), JsObject(JsField("key", true))))
+ CompactPrinter(JsArray(JsNull, JsNumber(1.23), JsObject(JsField("key", JsBoolean(true)))))
mustEqual """[null,1.23,{"key":true}]"""
)
"properly print a JSON padding (JSONP) if requested" in {
diff --git a/src/test/scala/cc/spray/json/JsonParserSpec.scala b/src/test/scala/cc/spray/json/JsonParserSpec.scala
index 0860d05..f030013 100644
--- a/src/test/scala/cc/spray/json/JsonParserSpec.scala
+++ b/src/test/scala/cc/spray/json/JsonParserSpec.scala
@@ -35,11 +35,11 @@ class JsonParserSpec extends Specification {
}
"properly parse a simple JsObject" in (
JsonParser(""" { "key" :42, "key2": "value" }""") mustEqual
- JsObject(JsField("key", 42), JsField("key2", "value"))
+ JsObject(JsField("key", JsNumber(42)), JsField("key2", JsString("value")))
)
"properly parse a simple JsArray" in (
JsonParser("""[null, 1.23 ,{"key":true } ] """) mustEqual
- JsArray(JsNull, JsNumber(1.23), JsObject(JsField("key", true)))
+ JsArray(JsNull, JsNumber(1.23), JsObject(JsField("key", JsBoolean(true))))
)
"be reentrant" in {
val largeJsonSource = FileUtils.readAllCharsFromResource("test.json")
diff --git a/src/test/scala/cc/spray/json/ProductFormatsSpec.scala b/src/test/scala/cc/spray/json/ProductFormatsSpec.scala
index 7c643e9..059b931 100644
--- a/src/test/scala/cc/spray/json/ProductFormatsSpec.scala
+++ b/src/test/scala/cc/spray/json/ProductFormatsSpec.scala
@@ -18,7 +18,7 @@ class ProductFormatsSpec extends Specification {
"A JsonFormat created with `jsonFormat`, for a case class with 2 elements," should {
import TestProtocol1._
val obj = Test2(42, Some(4.2))
- val json = JsObject(JsField("a", 42), JsField("b", 4.2))
+ val json = JsObject(JsField("a", JsNumber(42)), JsField("b", JsNumber(4.2)))
"convert to a respective JsObject" in {
obj.toJson mustEqual json
}
@@ -26,20 +26,20 @@ class ProductFormatsSpec extends Specification {
json.convertTo[Test2] mustEqual obj
}
"throw a DeserializationException if the JsObject does not all required members" in (
- JsObject(JsField("b", 4.2)).convertTo[Test2] must
+ JsObject(JsField("b", JsNumber(4.2))).convertTo[Test2] must
throwA(new DeserializationException("Object is missing required member 'a'"))
)
"not require the presence of optional fields for deserialization" in {
- JsObject(JsField("a", 42)).convertTo[Test2] mustEqual Test2(42, None)
+ JsObject(JsField("a", JsNumber(42))).convertTo[Test2] mustEqual Test2(42, None)
}
"not render `None` members during serialization" in {
- Test2(42, None).toJson mustEqual JsObject(JsField("a", 42))
+ Test2(42, None).toJson mustEqual JsObject(JsField("a", JsNumber(42)))
}
"ignore additional members during deserialization" in {
- JsObject(JsField("a", 42), JsField("b", 4.2), JsField("c", 'no)).convertTo[Test2] mustEqual obj
+ JsObject(JsField("a", JsNumber(42)), JsField("b", JsNumber(4.2)), JsField("c", JsString('no))).convertTo[Test2] mustEqual obj
}
"not depend on any specific member order for deserialization" in {
- JsObject(JsField("b", 4.2), JsField("a", 42)).convertTo[Test2] mustEqual obj
+ JsObject(JsField("b", JsNumber(4.2)), JsField("a", JsNumber(42))).convertTo[Test2] mustEqual obj
}
"throw a DeserializationException if the JsValue is not a JsObject" in (
JsNull.convertTo[Test2] must throwA(new DeserializationException("Object expected"))
@@ -49,7 +49,7 @@ class ProductFormatsSpec extends Specification {
"A JsonProtocol mixing in NullOptions" should {
"render `None` members to `null`" in {
import TestProtocol2._
- Test2(42, None).toJson mustEqual JsObject(JsField("a", 42), JsField("b", JsNull))
+ Test2(42, None).toJson mustEqual JsObject(JsField("a", JsNumber(42)), JsField("b", JsNull))
}
}
diff --git a/src/test/scala/cc/spray/json/ReadmeSpec.scala b/src/test/scala/cc/spray/json/ReadmeSpec.scala
index 1a30d39..b1c6674 100644
--- a/src/test/scala/cc/spray/json/ReadmeSpec.scala
+++ b/src/test/scala/cc/spray/json/ReadmeSpec.scala
@@ -10,7 +10,7 @@ class ReadmeSpec extends Specification {
val json = """{ "some": "JSON source" }"""
val jsonAst = JsonParser(json)
- jsonAst mustEqual JsObject(JsField("some", "JSON source"))
+ jsonAst mustEqual JsObject(JsField("some", JsString("JSON source")))
val json2 = PrettyPrinter(jsonAst)
json2 mustEqual