aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/json.scala
diff options
context:
space:
mode:
authorStewart Stewart <stewart@driver.xyz>2017-05-10 11:44:27 -0400
committerStewart Stewart <stewart@driver.xyz>2017-05-10 13:32:54 -0400
commitdf6202fa411b1294dd481c7d6c4062c3ecdbb437 (patch)
treefd0d34b8c124b78475e7f8f7cedc49870a40b463 /src/main/scala/xyz/driver/core/json.scala
parentb5842ef89f814d6bc9286a2a7de8278bb4411e94 (diff)
downloaddriver-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.scala23
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 {