diff options
author | vlad <vlad@driver.xyz> | 2017-05-25 17:13:41 -0700 |
---|---|---|
committer | vlad <vlad@driver.xyz> | 2017-05-25 17:13:41 -0700 |
commit | 3dfb989d221d0f121404adaac0d970228fa180a5 (patch) | |
tree | 9f9c765cdcd31178f1ea0d983bb563b0d68c45e8 /src/main/scala/xyz/driver/core/json.scala | |
parent | ad33ff15ff642b29e21a82c3e8625feb12567aa7 (diff) | |
parent | 0a3438068e4b853e4c42f83a4eb304ae53382e51 (diff) | |
download | driver-core-3dfb989d221d0f121404adaac0d970228fa180a5.tar.gz driver-core-3dfb989d221d0f121404adaac0d970228fa180a5.tar.bz2 driver-core-3dfb989d221d0f121404adaac0d970228fa180a5.zip |
Merge branch 'master' of https://github.com/drivergroup/driver-core into http-stacktrace
# Conflicts:
# src/main/scala/xyz/driver/core/app.scala
# src/main/scala/xyz/driver/core/rest.scala
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, 15 insertions, 8 deletions
diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 21bcad5..b203c91 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -1,21 +1,27 @@ 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._ - def IdInPath[T]: PathMatcher1[Id[T]] = new PathMatcher1[Id[T]] { + private def UuidInPath[T]: PathMatcher1[Id[T]] = + PathMatchers.JavaUUID.map((id: UUID) => Id[T](id.toString.toLowerCase)) + + def IdInPath[T]: PathMatcher1[Id[T]] = UuidInPath[T] | new PathMatcher1[Id[T]] { def apply(path: Path) = path match { case Path.Segment(segment, tail) => Matched(tail, Tuple1(Id[T](segment))) case _ => Unmatched @@ -26,8 +32,9 @@ object json { def write(id: Id[T]) = JsString(id.value) def read(value: JsValue) = value match { - case JsString(id) => Id[T](id) - case _ => throw DeserializationException("Id expects string") + case JsString(id) if Try(UUID.fromString(id)).isSuccess => Id[T](id.toLowerCase) + case JsString(id) => Id[T](id) + case _ => throw DeserializationException("Id expects string") } } |