diff options
Diffstat (limited to 'src/main/scala/xyz/driver/core/database/database.scala')
-rw-r--r-- | src/main/scala/xyz/driver/core/database/database.scala | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/main/scala/xyz/driver/core/database/database.scala b/src/main/scala/xyz/driver/core/database/database.scala index bd20b54..f3630ff 100644 --- a/src/main/scala/xyz/driver/core/database/database.scala +++ b/src/main/scala/xyz/driver/core/database/database.scala @@ -126,6 +126,33 @@ package database { } } + trait GenericIdColumnTypes[IdType] extends ColumnTypes { + import profile.api._ + implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, IdType]] + } + + object GenericIdColumnTypes { + trait UUID extends GenericIdColumnTypes[java.util.UUID] { + import profile.api._ + + override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, java.util.UUID]] = + MappedColumnType + .base[GenericId[T, java.util.UUID], java.util.UUID](id => id.value, uuid => UuidId[T](uuid)) + } + trait SerialId extends GenericIdColumnTypes[Long] { + import profile.api._ + + override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, Long]] = + MappedColumnType.base[GenericId[T, Long], Long](_.value, serialId => NumericId[T](serialId)) + } + trait NaturalId extends GenericIdColumnTypes[String] { + import profile.api._ + + override implicit def `xyz.driver.core.GenericId.columnType`[T]: BaseColumnType[GenericId[T, String]] = + MappedColumnType.base[GenericId[T, String], String](_.value, Id[T]) + } + } + trait TimestampColumnTypes extends ColumnTypes { import profile.api._ implicit def `xyz.driver.core.time.Time.columnType`: BaseColumnType[Time] @@ -166,6 +193,16 @@ package database { def naturalKeyMapper[T] = MappedColumnType.base[Id[T], String](_.value, Id[T]) } + trait GenericKeyMappers extends ColumnTypes { + import profile.api._ + + def uuidKeyMapper[T] = + MappedColumnType + .base[UuidId[T], java.util.UUID](id => id.value, uuid => UuidId[T](uuid)) + def serialKeyMapper[T] = MappedColumnType.base[NumericId[T], Long](_.value, serialId => NumericId[T](serialId)) + def naturalKeyMapper[T] = MappedColumnType.base[Id[T], String](_.value, Id[T]) + } + trait DatabaseObject extends ColumnTypes { def createTables(): Future[Unit] def disconnect(): Unit |