summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMathias <mathias@decodified.com>2015-04-20 12:14:03 +0200
committerMathias <mathias@decodified.com>2015-04-20 12:14:03 +0200
commit97f92870d0de32807445ff4d81c9be7948fa8de1 (patch)
tree27f2ea579bbbb4ab3a088e349a450340555421c7 /src/main
parent406faa002d84c5874aad43980a4f600423da62e5 (diff)
parent13bb8082f681a8fb55c4de1651caa461f7f6c38b (diff)
downloadspray-json-97f92870d0de32807445ff4d81c9be7948fa8de1.tar.gz
spray-json-97f92870d0de32807445ff4d81c9be7948fa8de1.tar.bz2
spray-json-97f92870d0de32807445ff4d81c9be7948fa8de1.zip
Merge pull request #136 from fommil/patch-1
close #132
Diffstat (limited to 'src/main')
-rw-r--r--src/main/scala/spray/json/ProductFormats.scala29
1 files changed, 13 insertions, 16 deletions
diff --git a/src/main/scala/spray/json/ProductFormats.scala b/src/main/scala/spray/json/ProductFormats.scala
index 39d5300..9914b55 100644
--- a/src/main/scala/spray/json/ProductFormats.scala
+++ b/src/main/scala/spray/json/ProductFormats.scala
@@ -46,22 +46,19 @@ trait ProductFormats extends ProductFormatsInstances {
}
}
- protected def fromField[T](value: JsValue, fieldName: String)(implicit reader: JsonReader[T]) = {
- value match {
- case x: JsObject =>
- var fieldFound = false
- try {
- val fieldValue = x.fields(fieldName)
- fieldFound = true
- reader.read(fieldValue)
- }
- catch {
- case e: NoSuchElementException if !fieldFound =>
- if (reader.isInstanceOf[OptionFormat[_]]) None.asInstanceOf[T]
- else deserializationError("Object is missing required member '" + fieldName + "'", e)
- }
- case _ => deserializationError("Object expected in field '" + fieldName + "'")
- }
+ protected def fromField[T](value: JsValue, fieldName: String)
+ (implicit reader: JsonReader[T]) = value match {
+ case x: JsObject if
+ (reader.isInstanceOf[OptionFormat[_]] &
+ !x.fields.contains(fieldName)) =>
+ None.asInstanceOf[T]
+ case x: JsObject =>
+ try reader.read(x.fields(fieldName))
+ catch {
+ case e: NoSuchElementException =>
+ deserializationError("Object is missing required member '" + fieldName + "'", e)
+ }
+ case _ => deserializationError("Object expected in field '" + fieldName + "'")
}
protected def extractFieldNames(classManifest: ClassManifest[_]): Array[String] = {