diff options
author | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-19 16:25:10 -0500 |
---|---|---|
committer | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-19 16:25:10 -0500 |
commit | 2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2 (patch) | |
tree | be8846d2b0618cc26d5eebabb46f274f7d232b8c /src | |
parent | 53d04d4255489bd5802dc91d9dbebddd206d630b (diff) | |
download | driver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.tar.gz driver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.tar.bz2 driver-core-2f6a2d763732285dc1cffb0d3a435a9e9c96cbd2.zip |
serialize date to json as object with three fields
Diffstat (limited to 'src')
-rw-r--r-- | src/main/scala/xyz/driver/core/date.scala | 8 | ||||
-rw-r--r-- | src/main/scala/xyz/driver/core/json.scala | 20 |
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") } } |