diff options
author | Mathias <mathias@decodified.com> | 2015-04-20 12:14:03 +0200 |
---|---|---|
committer | Mathias <mathias@decodified.com> | 2015-04-20 12:14:03 +0200 |
commit | 97f92870d0de32807445ff4d81c9be7948fa8de1 (patch) | |
tree | 27f2ea579bbbb4ab3a088e349a450340555421c7 /src/main | |
parent | 406faa002d84c5874aad43980a4f600423da62e5 (diff) | |
parent | 13bb8082f681a8fb55c4de1651caa461f7f6c38b (diff) | |
download | spray-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.scala | 29 |
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] = { |