aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZach Smith <zach@driver.xyz>2017-11-14 17:11:32 -0800
committerZach Smith <zach@driver.xyz>2017-11-14 17:11:32 -0800
commit535058f5995a4fb9cc240225a617a51a0991c70d (patch)
treecc61c91bd38d1873aab143928df51cd5d0c99a86
parent523cc3ff8c3ee8f0e968d2a193bf427a8ef772bf (diff)
downloaddriver-core-535058f5995a4fb9cc240225a617a51a0991c70d.tar.gz
driver-core-535058f5995a4fb9cc240225a617a51a0991c70d.tar.bz2
driver-core-535058f5995a4fb9cc240225a617a51a0991c70d.zip
Add implicit GetResult definitions
-rw-r--r--src/main/scala/xyz/driver/core/database/SlickGetResultSupport.scala38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/database/SlickGetResultSupport.scala b/src/main/scala/xyz/driver/core/database/SlickGetResultSupport.scala
new file mode 100644
index 0000000..9a77a82
--- /dev/null
+++ b/src/main/scala/xyz/driver/core/database/SlickGetResultSupport.scala
@@ -0,0 +1,38 @@
+package xyz.driver.core.database
+
+import java.util.Calendar
+
+import slick.jdbc.GetResult
+import xyz.driver.core.date.{Date, Month}
+import xyz.driver.core.{Id, Name}
+import xyz.driver.core.time.Time
+
+trait SlickGetResultSupport {
+ implicit def idGetResult[U]: GetResult[Id[U]] =
+ GetResult(r => Id[U](r.nextString()))
+ implicit def idOptionGetResult[U]: GetResult[Option[Id[U]]] =
+ GetResult(_.nextStringOption().map(Id.apply[U]))
+
+ implicit def nameGetResult[U]: GetResult[Name[U]] =
+ GetResult(r => Name[U](r.nextString()))
+ implicit def nameOptionGetResult[U]: GetResult[Option[Name[U]]] =
+ GetResult(_.nextStringOption().map(Name.apply[U]))
+
+ implicit val timeGetResult: GetResult[Time] =
+ GetResult(r => Time(r.nextTimestamp.getTime))
+ implicit val timeOptionGetResult: GetResult[Option[Time]] =
+ GetResult(_.nextTimestampOption().map(t => Time(t.getTime)))
+
+ private def javaDateToDate(jdate: java.util.Date): Date = {
+ val cal = Calendar.getInstance
+ cal.setTime(jdate)
+ Date(cal.get(Calendar.YEAR), Month(cal.get(Calendar.MONTH)), cal.get(Calendar.DAY_OF_MONTH))
+ }
+
+ implicit val dateGetResult: GetResult[Date] =
+ GetResult(r => javaDateToDate(r.nextDate()))
+ implicit val dateOptionGetResult: GetResult[Option[Date]] =
+ GetResult(_.nextDateOption().map(javaDateToDate))
+}
+
+object SlickGetResultSupport extends SlickGetResultSupport