From 59815982ac0c0998573aae3a82f038b34f3dfa75 Mon Sep 17 00:00:00 2001 From: Stewart Stewart Date: Thu, 16 Mar 2017 16:22:06 -0400 Subject: add Year and Day type tags --- src/main/scala/xyz/driver/core/date.scala | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/main') diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala index d3fd8a7..e58be9a 100644 --- a/src/main/scala/xyz/driver/core/date.scala +++ b/src/main/scala/xyz/driver/core/date.scala @@ -9,10 +9,17 @@ import scalaz.syntax.equal._ object date { + type Day = Int @@ Day.type + object Day { + def apply(value: Int): Day = { + require(0 to 31 contains value, "Day must be in range 0 <= value <= 11") + value.asInstanceOf[Day] + } + def unapply(dayString: String): Option[Int] = { require(dayString.length === 2, s"ISO 8601 day string, DD, must have length 2: $dayString") - Try(dayString.toInt).toOption + Try(dayString.toInt).toOption.map(apply) } } @@ -42,10 +49,14 @@ object date { } } + type Year = Int @@ Year.type + object Year { + def apply(value: Int): Year = value.asInstanceOf[Year] + def unapply(yearString: String): Option[Int] = { require(yearString.length === 4, s"ISO 8601 year string, YYYY, must have length 4: $yearString") - Try(yearString.toInt).toOption + Try(yearString.toInt).toOption.map(apply) } } -- cgit v1.2.3