aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/xyz/driver/core/json.scala
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-20 01:54:57 -0500
committerGitHub <noreply@github.com>2016-12-20 01:54:57 -0500
commit687919e7c163e1ff8a002f1a2c24e4b37f75f20d (patch)
treeb185f9e8c9d0bf515b989ba8c13dc0f264e6fd25 /src/main/scala/xyz/driver/core/json.scala
parentdd8cbb3ada14a4f05d5683b90a5b83dc4b3b35f5 (diff)
parentf0a5e41ec45d2420ba7173e156806f81701f9796 (diff)
downloaddriver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.tar.gz
driver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.tar.bz2
driver-core-687919e7c163e1ff8a002f1a2c24e4b37f75f20d.zip
Merge pull request #8 from drivergroup/dal-improvementsv0.9.29
Dal improvements
Diffstat (limited to 'src/main/scala/xyz/driver/core/json.scala')
-rw-r--r--src/main/scala/xyz/driver/core/json.scala13
1 files changed, 13 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..5833383 100644
--- a/src/main/scala/xyz/driver/core/json.scala
+++ b/src/main/scala/xyz/driver/core/json.scala
@@ -7,11 +7,14 @@ 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, Month}
import scala.reflect.runtime.universe._
object json {
+ import DefaultJsonProtocol._
+
def IdInPath[T]: PathMatcher1[Id[T]] = new PathMatcher1[Id[T]] {
def apply(path: Path) = path match {
case Path.Segment(segment, tail) => Matched(tail, Tuple1(Id[T](segment)))
@@ -66,6 +69,16 @@ object json {
}
}
+ implicit val monthFormat = new RootJsonFormat[Month] {
+ def write(month: Month) = JsNumber(month)
+ def read(value: JsValue): Month = value match {
+ case JsNumber(month) if 0 <= month && month <= 11 => date.tagMonth(month.toInt)
+ case _ => throw DeserializationException("Expected a number from 0 to 11")
+ }
+ }
+
+ implicit val dateFormat = jsonFormat3(Date)
+
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))