aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-19 16:25:10 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-12-19 16:25:10 -0500
commit2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2 (patch)
treebe8846d2b0618cc26d5eebabb46f274f7d232b8c
parent53d04d4255489bd5802dc91d9dbebddd206d630b (diff)
downloaddriver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.tar.gz
driver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.tar.bz2
driver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.zip
serialize date to json as object with three fields
-rw-r--r--src/main/scala/xyz/driver/core/date.scala8
-rw-r--r--src/main/scala/xyz/driver/core/json.scala20
2 files changed, 7 insertions, 21 deletions
diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala
index 0cf8986..b954749 100644
--- a/src/main/scala/xyz/driver/core/date.scala
+++ b/src/main/scala/xyz/driver/core/date.scala
@@ -5,7 +5,7 @@ import java.util.Calendar
object date {
type Month = Int @@ Month.type
- private[date] def tagMonth(value: Int): Month = value.asInstanceOf[Month]
+ private[core] def tagMonth(value: Int): Month = value.asInstanceOf[Month]
object Month {
val JANUARY = tagMonth(Calendar.JANUARY)
@@ -22,7 +22,6 @@ 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 toJavaDate: java.util.Date = {
val cal = Calendar.getInstance()
@@ -34,11 +33,6 @@ 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 ecd7cce..fee7341 100644
--- a/src/main/scala/xyz/driver/core/json.scala
+++ b/src/main/scala/xyz/driver/core/json.scala
@@ -7,7 +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 xyz.driver.core.date.Month
import scala.reflect.runtime.universe._
@@ -67,19 +67,11 @@ 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")
+ implicit val dateFormat = 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("Month is a 0-based number")
}
}