aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-17 02:11:18 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-12-17 11:59:39 -0500
commit53d04d4255489bd5802dc91d9dbebddd206d630b (patch)
tree54de6a07d4b7fc0f774e69614fdf9d5604a734ec
parentbb7e18fe7998556086863acc0957056079363d4a (diff)
downloaddriver-core-53d04d4255489bd5802dc91d9dbebddd206d630b.tar.gz
driver-core-53d04d4255489bd5802dc91d9dbebddd206d630b.tar.bz2
driver-core-53d04d4255489bd5802dc91d9dbebddd206d630b.zip
add json format for date (ISO)
-rw-r--r--src/main/scala/xyz/driver/core/date.scala7
-rw-r--r--src/main/scala/xyz/driver/core/json.scala17
2 files changed, 23 insertions, 1 deletions
diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala
index b423585..0cf8986 100644
--- a/src/main/scala/xyz/driver/core/date.scala
+++ b/src/main/scala/xyz/driver/core/date.scala
@@ -23,7 +23,7 @@ object date {
final case class Date(year: Int, month: Month, day: Int) {
def iso8601: String = f"$year%04d-${month + 1}%02d-$day%02d"
- def toJavaSqlDate = new java.sql.Date(toJavaDate.getTime)
+ def toJavaSqlDate = new java.sql.Date(toJavaDate.getTime)
def toJavaDate: java.util.Date = {
val cal = Calendar.getInstance()
cal.set(Calendar.YEAR, year - 1900)
@@ -34,6 +34,11 @@ object date {
}
object Date {
+ def parseIso(iso: String): Option[Date] = {
+ util.Try(iso.split("-").map(_.toInt)).toOption collect {
+ case Array(year, month, day) => Date(year, tagMonth(month), day)
+ }
+ }
def fromJavaDate(date: java.util.Date) = {
val cal = Calendar.getInstance()
cal.setTime(date)
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))