From a4dd609bbef58f631f5ceaa1f034deb0ecf12db1 Mon Sep 17 00:00:00 2001 From: Zach Smith Date: Tue, 6 Mar 2018 15:00:16 -0800 Subject: Add DayOfWeek type --- src/main/scala/xyz/driver/core/date.scala | 16 ++++++++++++++++ src/main/scala/xyz/driver/core/generators.scala | 4 +++- src/main/scala/xyz/driver/core/json.scala | 5 ++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/scala/xyz/driver/core/date.scala b/src/main/scala/xyz/driver/core/date.scala index d6f64e4..fe35c91 100644 --- a/src/main/scala/xyz/driver/core/date.scala +++ b/src/main/scala/xyz/driver/core/date.scala @@ -5,6 +5,7 @@ import java.util.Calendar import scala.util.Try import scalaz.std.anyVal._ +import scalaz.Scalaz.stringInstance import scalaz.syntax.equal._ /** @@ -14,6 +15,21 @@ import scalaz.syntax.equal._ */ object date { + sealed trait DayOfWeek + object DayOfWeek { + case object Monday extends DayOfWeek + case object Tuesday extends DayOfWeek + case object Wednesday extends DayOfWeek + case object Thursday extends DayOfWeek + case object Friday extends DayOfWeek + case object Saturday extends DayOfWeek + case object Sunday extends DayOfWeek + + val All: Set[DayOfWeek] = Set(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday) + + def fromString(day: String): Option[DayOfWeek] = All.find(_.toString === day) + } + type Day = Int @@ Day.type object Day { diff --git a/src/main/scala/xyz/driver/core/generators.scala b/src/main/scala/xyz/driver/core/generators.scala index e842dd2..e3ff326 100644 --- a/src/main/scala/xyz/driver/core/generators.scala +++ b/src/main/scala/xyz/driver/core/generators.scala @@ -4,7 +4,7 @@ import java.math.MathContext import java.util.UUID import xyz.driver.core.time.{Time, TimeRange} -import xyz.driver.core.date.Date +import xyz.driver.core.date.{Date, DayOfWeek} import scala.reflect.ClassTag import scala.util.Random @@ -80,6 +80,8 @@ object generators { def nextDate(): Date = nextTime().toDate(java.util.TimeZone.getTimeZone("UTC")) + def nextDayOfWeek(): DayOfWeek = oneOf(DayOfWeek.All) + def nextBigDecimal(multiplier: Double = 1000000.00, precision: Int = 2): BigDecimal = BigDecimal(multiplier * nextDouble, new MathContext(precision)) diff --git a/src/main/scala/xyz/driver/core/json.scala b/src/main/scala/xyz/driver/core/json.scala index e338638..02a35fd 100644 --- a/src/main/scala/xyz/driver/core/json.scala +++ b/src/main/scala/xyz/driver/core/json.scala @@ -12,7 +12,7 @@ import akka.http.scaladsl.marshalling.{Marshaller, Marshalling} import akka.http.scaladsl.unmarshalling.Unmarshaller import spray.json._ import xyz.driver.core.auth.AuthCredentials -import xyz.driver.core.date.{Date, Month} +import xyz.driver.core.date.{Date, DayOfWeek, Month} import xyz.driver.core.domain.{Email, PhoneNumber} import xyz.driver.core.time.Time import eu.timepit.refined.refineV @@ -80,6 +80,9 @@ object json { } } + implicit val dayOfWeekFormat: JsonFormat[DayOfWeek] = + new EnumJsonFormat[DayOfWeek](DayOfWeek.All.map(w => w.toString -> w)(collection.breakOut): _*) + implicit val dateFormat = new RootJsonFormat[Date] { def write(date: Date) = JsString(date.toString) def read(value: JsValue): Date = value match { -- cgit v1.2.3