From 53d04d4255489bd5802dc91d9dbebddd206d630b Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Sat, 17 Dec 2016 02:11:18 -0500 Subject: add json format for date (ISO) --- src/main/scala/xyz/driver/core/json.scala | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'src/main/scala/xyz/driver/core/json.scala') diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index 277543b..ecd7cce 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -7,6 +7,7 @@ import akka.http.scaladsl.unmarshalling.Unmarshaller import spray.json.{DeserializationException, JsNumber, _} import xyz.driver.core.revision.Revision import xyz.driver.core.time.Time +import xyz.driver.core.date.Date import scala.reflect.runtime.universe._ @@ -66,6 +67,22 @@ object json { } } + implicit val dateFormat = new RootJsonFormat[Date] { + def write(date: Date) = JsObject("calendarDate" -> JsString(date.iso8601)) + + def read(value: JsValue): Date = value match { + case JsObject(fields) => + fields + .get("calendarDate") + .flatMap { + case JsString(iso) => Date.parseIso(iso) + case _ => None + } + .getOrElse(throw DeserializationException("Date expects YYYY-MM-DD")) + case _ => throw DeserializationException("Date expects YYYY-MM-DD") + } + } + def RevisionInPath[T]: PathMatcher1[Revision[T]] = PathMatcher("""[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}""".r) flatMap { string => Some(Revision[T](string)) -- cgit v1.2.3