diff options
author | Jakob Odersky <jakob@odersky.com> | 2018-09-11 17:47:44 -0700 |
---|---|---|
committer | Jakob Odersky <jakob@odersky.com> | 2018-09-11 17:51:11 -0700 |
commit | 2a372d47b4000f487080b3eeeacd58ba2dfbceea (patch) | |
tree | 249302af8c7b007923dba365c089978f0559ca87 /shared/src/main/scala | |
parent | 4a65471458833f440dc080ddcabf24ed59bd49e1 (diff) | |
download | spray-json-derivation-2a372d47b4000f487080b3eeeacd58ba2dfbceea.tar.gz spray-json-derivation-2a372d47b4000f487080b3eeeacd58ba2dfbceea.tar.bz2 spray-json-derivation-2a372d47b4000f487080b3eeeacd58ba2dfbceea.zip |
Upgrade magnolia
Diffstat (limited to 'shared/src/main/scala')
-rw-r--r-- | shared/src/main/scala/DerivedFormats.scala | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/shared/src/main/scala/DerivedFormats.scala b/shared/src/main/scala/DerivedFormats.scala index 7c13314..c4781fa 100644 --- a/shared/src/main/scala/DerivedFormats.scala +++ b/shared/src/main/scala/DerivedFormats.scala @@ -29,14 +29,16 @@ trait DerivedFormats { self: BasicFormats => val param = ctx.parameters.head param.typeclass.write(param.dereference(value)) } else { - val fields: Seq[(String, JsValue)] = ctx.parameters.collect { - case param - if !param.option || param.dereference(value) != None || printNull => - extractFieldName(param.label) -> param.typeclass.write( - param.dereference(value) - ) + val fields: Seq[(String, JsValue)] = ctx.parameters.map { param => + extractFieldName(param.label) -> param.typeclass.write( + param.dereference(value) + ) + } + val nullFiltered = fields.filter { + case (_, JsNull) => printNull + case (_, _) => true } - JsObject(fields: _*) + JsObject(nullFiltered: _*) } override def read(value: JsValue): T = value match { @@ -48,11 +50,7 @@ trait DerivedFormats { self: BasicFormats => } else { ctx.construct { param => val fieldName = extractFieldName(param.label) - val fieldValue = if (param.option) { - obj.fields.getOrElse(fieldName, JsNull) - } else { - obj.fields(fieldName) - } + val fieldValue = obj.fields.getOrElse(fieldName, JsNull) param.typeclass.read(fieldValue) } } |