diff options
author | vlad <vlad@drivergrp.com> | 2016-07-17 20:46:10 -0400 |
---|---|---|
committer | vlad <vlad@drivergrp.com> | 2016-07-17 20:46:10 -0400 |
commit | 9cb5df86335b01e770eb656aa5eda3692410276e (patch) | |
tree | 9e92787feed60585400da13110fb9a3bf26e0d96 /src/main/scala/com/drivergrp/core/rest.scala | |
parent | c5f1be05d99059421fdd203f21fd80378ba80b41 (diff) | |
download | driver-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.scala | 25 |
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 { |