diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-03-29 13:11:43 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-03-29 13:21:06 -0700 |
commit | 3a1d922d817fe570a34ce94bf5ec3214369d5af8 (patch) | |
tree | ba0ef59971c29af862ee04e283fb89949b563c61 /src/main/scala/DerivedFormats.scala | |
parent | 2f3f9aa851080b6c79f3af14b3fdfeab56feffec (diff) | |
download | spray-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.scala | 7 |
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 => |