aboutsummaryrefslogtreecommitdiff
path: root/shared/src/main/scala/DerivedFormats.scala
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/main/scala/DerivedFormats.scala')
-rw-r--r--shared/src/main/scala/DerivedFormats.scala24
1 files changed, 15 insertions, 9 deletions
diff --git a/shared/src/main/scala/DerivedFormats.scala b/shared/src/main/scala/DerivedFormats.scala
index f6a3f7b..ed39f46 100644
--- a/shared/src/main/scala/DerivedFormats.scala
+++ b/shared/src/main/scala/DerivedFormats.scala
@@ -24,18 +24,24 @@ trait DerivedFormats { self: BasicFormats =>
def combine[T](ctx: CaseClass[JsonFormat, T]): JsonFormat[T] =
new JsonFormat[T] {
- override def write(value: T): JsValue = {
- 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)
- )
+ override def write(value: T): JsValue =
+ if (ctx.isValueClass) {
+ 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)
+ )
+ }
+ JsObject(fields: _*)
}
- JsObject(fields: _*)
- }
override def read(value: JsValue): T = value match {
+ case js if ctx.isValueClass =>
+ ctx.construct(param => param.typeclass.read(value))
case obj: JsObject =>
if (ctx.isObject) {
ctx.rawConstruct(Seq.empty)