diff options
author | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-21 00:47:32 -0500 |
---|---|---|
committer | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-21 00:47:32 -0500 |
commit | e264100f16c7f5a8d4a3c2c0cd71cb964ac6a689 (patch) | |
tree | 730b1df1dd6d12b47fc3767de8d9519960c3af3f | |
parent | 687919e7c163e1ff8a002f1a2c24e4b37f75f20d (diff) | |
download | driver-core-e264100f16c7f5a8d4a3c2c0cd71cb964ac6a689.tar.gz driver-core-e264100f16c7f5a8d4a3c2c0cd71cb964ac6a689.tar.bz2 driver-core-e264100f16c7f5a8d4a3c2c0cd71cb964ac6a689.zip |
add bidirectional id type mappers
-rw-r--r-- | src/main/scala/xyz/driver/core/core.scala | 9 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/CoreTest.scala | 2 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala index 8c13aeb..cbc5ce9 100644 --- a/src/main/scala/xyz/driver/core/core.scala +++ b/src/main/scala/xyz/driver/core/core.scala @@ -38,9 +38,16 @@ package core { implicit def idEqual[T]: Equal[Id[T]] = Equal.equal[Id[T]](_ == _) implicit def idOrdering[T]: Ordering[Id[T]] = Ordering.by[Id[T], String](_.value) + sealed trait Mapper[Entity, Row] object Mapper { - def apply[A, B]: (Id[A] => Id[B]) = (id: Id[A]) => Id[B](id.value) + def apply[Entity, Row] = new Mapper[Entity, Row] {} } + + implicit def to[Row, Entity](rowId: Id[Row])(implicit ev: Mapper[Entity, Row]): Id[Entity] = + Id[Entity](rowId.value) + + implicit def from[Entity, Row](entityId: Id[Entity])(implicit ev: Mapper[Entity, Row]): Id[Row] = + Id[Row](entityId.value) } final case class Name[+Tag](value: String) extends AnyVal { diff --git a/src/test/scala/xyz/driver/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index e210887..520fe8e 100644 --- a/src/test/scala/xyz/driver/core/CoreTest.scala +++ b/src/test/scala/xyz/driver/core/CoreTest.scala @@ -45,9 +45,7 @@ class CoreTest extends FlatSpec with Matchers with MockitoSugar { final case class Z(id: Id[Z]) implicit val xy = Id.Mapper[X, Y] - implicit val yx = Id.Mapper[Y, X] implicit val yz = Id.Mapper[Y, Z] - implicit val zy = Id.Mapper[Z, Y] // The real test is that the following statements compile: val x = X(Id("0")) |