From 2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Mon, 19 Dec 2016 16:25:10 -0500 Subject: serialize date to json as object with three fields --- src/main/scala/xyz/driver/core/date.scala | 8 +------- src/main/scala/xyz/driver/core/json.scala | 20 ++++++-------------- 2 files changed, 7 insertions(+), 21 deletions(-) (limited to 'src/main/scala') 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") } } -- cgit v1.2.3