From ccd6c4281fb0ddd0a74b79aa24f85834f5c9647a Mon Sep 17 00:00:00 2001 From: Sergey Nastich Date: Mon, 10 Sep 2018 19:05:58 -0400 Subject: Add `@@ Trimmed` tag for Strings and Names to support by JSON readers (#211) --- src/main/scala/xyz/driver/core/json.scala | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/main/scala/xyz/driver/core/json.scala') diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 98725fb..d9319e9 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -22,8 +22,8 @@ import xyz.driver.core.domain.{Email, PhoneNumber} import xyz.driver.core.rest.errors._ import xyz.driver.core.time.{Time, TimeOfDay} -import scala.reflect.{ClassTag, classTag} import scala.reflect.runtime.universe._ +import scala.reflect.{ClassTag, classTag} import scala.util.Try import scala.util.control.NonFatal @@ -56,13 +56,16 @@ object json { } } - implicit def taggedFormat[F, T](implicit underlying: JsonFormat[F]): JsonFormat[F @@ T] = new JsonFormat[F @@ T] { - import tagging._ + implicit def taggedFormat[F, T](implicit underlying: JsonFormat[F], convert: F => F @@ T = null): JsonFormat[F @@ T] = + new JsonFormat[F @@ T] { + import tagging._ - override def write(obj: F @@ T): JsValue = underlying.write(obj) + private val transformReadValue = Option(convert).getOrElse((_: F).tagged[T]) - override def read(json: JsValue): F @@ T = underlying.read(json).tagged[T] - } + override def write(obj: F @@ T): JsValue = underlying.write(obj) + + override def read(json: JsValue): F @@ T = transformReadValue(underlying.read(json)) + } def NameInPath[T]: PathMatcher1[Name[T]] = new PathMatcher1[Name[T]] { def apply(path: Path) = path match { -- cgit v1.2.3