aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/com/drivergrp/core/rest.scala
diff options
context:
space:
mode:
authorvlad <vlad@drivergrp.com>2016-07-17 20:46:10 -0400
committervlad <vlad@drivergrp.com>2016-07-17 20:46:10 -0400
commit9cb5df86335b01e770eb656aa5eda3692410276e (patch)
tree9e92787feed60585400da13110fb9a3bf26e0d96 /src/main/scala/com/drivergrp/core/rest.scala
parentc5f1be05d99059421fdd203f21fd80378ba80b41 (diff)
downloaddriver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.gz
driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.tar.bz2
driver-core-9cb5df86335b01e770eb656aa5eda3692410276e.zip
App interruption and formats for Time
Diffstat (limited to 'src/main/scala/com/drivergrp/core/rest.scala')
-rw-r--r--src/main/scala/com/drivergrp/core/rest.scala25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/main/scala/com/drivergrp/core/rest.scala b/src/main/scala/com/drivergrp/core/rest.scala
index 421f5d1..4e8ea3e 100644
--- a/src/main/scala/com/drivergrp/core/rest.scala
+++ b/src/main/scala/com/drivergrp/core/rest.scala
@@ -11,12 +11,12 @@ import akka.stream.ActorMaterializer
import akka.util.Timeout
import com.drivergrp.core.logging.Logger
import com.drivergrp.core.stats.Stats
-import com.drivergrp.core.time.TimeRange
+import com.drivergrp.core.time.{Time, TimeRange}
import com.drivergrp.core.time.provider.TimeProvider
import com.github.swagger.akka.model._
import com.github.swagger.akka.{HasActorSystem, SwaggerHttpService}
import com.typesafe.config.Config
-import spray.json.{DeserializationException, JsNumber, JsString, JsValue, RootJsonFormat}
+import spray.json.{DeserializationException, JsNumber, JsObject, JsString, JsValue, RootJsonFormat}
import scala.concurrent.duration._
import scala.concurrent.{ExecutionContext, Future}
@@ -72,8 +72,7 @@ object rest {
def IdInPath[T]: PathMatcher1[Id[T]] =
PathMatcher("""[+-]?\d*""".r) flatMap { string ⇒
- try Some(Id[T](string.toLong))
- catch { case _: IllegalArgumentException ⇒ None }
+ try Some(Id[T](string.toLong)) catch { case _: IllegalArgumentException ⇒ None }
}
implicit def idFormat[T] = new RootJsonFormat[Id[T]] {
@@ -97,6 +96,24 @@ object rest {
case _ => throw new DeserializationException("Name expects string")
}
}
+
+ def TimeInPath[T]: PathMatcher1[Time] =
+ PathMatcher("""[+-]?\d*""".r) flatMap { string ⇒
+ try Some(Time(string.toLong)) catch { case _: IllegalArgumentException ⇒ None }
+ }
+
+ implicit def timeFormat[T] = new RootJsonFormat[Time] {
+ def write(time: Time) = JsObject("timestamp" -> JsNumber(time.millis))
+
+ def read(value: JsValue): Time = value match {
+ case JsObject(fields) =>
+ fields.get("timestamp").flatMap {
+ case JsNumber(millis) => Some(Time(millis.toLong))
+ case _ => None
+ }.getOrElse(throw new DeserializationException("Time expects number"))
+ case _ => throw new DeserializationException("Time expects number")
+ }
+ }
}
trait OptionTDirectives {