diff options
author | Stewart Stewart <stewart@driver.xyz> | 2017-05-10 11:44:27 -0400 |
---|---|---|
committer | Stewart Stewart <stewart@driver.xyz> | 2017-05-10 13:32:54 -0400 |
commit | df6202fa411b1294dd481c7d6c4062c3ecdbb437 (patch) | |
tree | fd0d34b8c124b78475e7f8f7cedc49870a40b463 /src/main/scala/xyz/driver/core/json.scala | |
parent | b5842ef89f814d6bc9286a2a7de8278bb4411e94 (diff) | |
download | driver-core-df6202fa411b1294dd481c7d6c4062c3ecdbb437.tar.gz driver-core-df6202fa411b1294dd481c7d6c4062c3ecdbb437.tar.bz2 driver-core-df6202fa411b1294dd481c7d6c4062c3ecdbb437.zip |
normalize uuid case on json deserialization
Diffstat (limited to 'src/main/scala/xyz/driver/core/json.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 96e74c0..67bf8e4 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -2,17 +2,18 @@ package xyz.driver.core import java.util.UUID +import scala.reflect.runtime.universe._ +import scala.util.Try + import akka.http.scaladsl.model.Uri.Path +import akka.http.scaladsl.server._ import akka.http.scaladsl.server.PathMatcher.{Matched, Unmatched} -import akka.http.scaladsl.server.{PathMatcher, _} import akka.http.scaladsl.unmarshalling.Unmarshaller -import spray.json.{DeserializationException, JsNumber, _} +import spray.json._ import xyz.driver.core.auth.AuthCredentials -import xyz.driver.core.time.Time import xyz.driver.core.date.{Date, Month} import xyz.driver.core.domain.{Email, PhoneNumber} - -import scala.reflect.runtime.universe._ +import xyz.driver.core.time.Time object json { import DefaultJsonProtocol._ @@ -31,7 +32,17 @@ object json { } } - implicit def idFormat[T] = new RootJsonFormat[Id[T]] { + implicit def uuidFormat[T] = new RootJsonFormat[Id[T]] { + def write(id: Id[T]) = JsString(id.value) + + def read(value: JsValue) = value match { + case JsString(id) if Try(UUID.fromString(id)).isSuccess => Id[T](id.toLowerCase) + case JsString(id) => throw DeserializationException("Expected Id as Uuid string") + case _ => throw DeserializationException("Id expects string") + } + } + + def idFormat[T] = new RootJsonFormat[Id[T]] { def write(id: Id[T]) = JsString(id.value) def read(value: JsValue) = value match { |