diff options
Diffstat (limited to 'src/main/scala/xyz/driver/core/json.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala | 17 |
1 files changed, 17 insertions, 0 deletions
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)) |