aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/DerivedFormats.scala
diff options
context:
space:
mode:
authorJakob Odersky <jakob@odersky.com>2018-03-29 13:11:43 -0700
committerJakob Odersky <jakob@odersky.com>2018-03-29 13:21:06 -0700
commit3a1d922d817fe570a34ce94bf5ec3214369d5af8 (patch)
treeba0ef59971c29af862ee04e283fb89949b563c61 /src/main/scala/DerivedFormats.scala
parent2f3f9aa851080b6c79f3af14b3fdfeab56feffec (diff)
downloadspray-json-derivation-option.tar.gz
spray-json-derivation-option.tar.bz2
spray-json-derivation-option.zip
Allow deserialization of optional fields if they are omittedoption
Fixes #5
Diffstat (limited to 'src/main/scala/DerivedFormats.scala')
-rw-r--r--src/main/scala/DerivedFormats.scala7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/main/scala/DerivedFormats.scala b/src/main/scala/DerivedFormats.scala
index d0cac38..5bba08a 100644
--- a/src/main/scala/DerivedFormats.scala
+++ b/src/main/scala/DerivedFormats.scala
@@ -24,7 +24,12 @@ trait DerivedFormats { self: BasicFormats =>
ctx.rawConstruct(Seq.empty)
} else {
ctx.construct { param =>
- param.typeclass.read(obj.fields(param.label))
+ val fieldValue = if (param.isOption) {
+ obj.fields.getOrElse(param.label, JsNull)
+ } else {
+ obj.fields(param.label)
+ }
+ param.typeclass.read(fieldValue)
}
}
case js =>