aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVlad Uspensky <v.uspenskiy@icloud.com>2016-12-22 22:44:59 -0800
committerGitHub <noreply@github.com>2016-12-22 22:44:59 -0800
commit7586f5477c9fd09df68d76e5f03313f0ad438bb3 (patch)
tree056edf8076d61647f7a7fd0dd5a38bec8b96ef11
parenta9e83ef7c5452d30bb0b49ae508efb17210c49ef (diff)
parent6674c5b096bd6fce5706632e0d63904afe0c91de (diff)
downloaddriver-core-7586f5477c9fd09df68d76e5f03313f0ad438bb3.tar.gz
driver-core-7586f5477c9fd09df68d76e5f03313f0ad438bb3.tar.bz2
driver-core-7586f5477c9fd09df68d76e5f03313f0ad438bb3.zip
Merge pull request #15 from drivergroup/symmetric-id-mapper
Allow explicit conversion with symmetric id mapper via apply
-rw-r--r--src/main/scala/xyz/driver/core/core.scala11
-rw-r--r--src/test/scala/xyz/driver/core/CoreTest.scala9
2 files changed, 14 insertions, 6 deletions
diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala
index 1c92423..db2af95 100644
--- a/src/main/scala/xyz/driver/core/core.scala
+++ b/src/main/scala/xyz/driver/core/core.scala
@@ -39,12 +39,15 @@ 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[E, R]
+ sealed class Mapper[E, R] {
+ def apply[T >: E](id: Id[R]): Id[T] = Id[E](id.value)
+ def apply[T >: R](id: Id[E])(implicit dummy: DummyImplicit): Id[T] = Id[R](id.value)
+ }
object Mapper {
- def apply[E, R] = new Mapper[E, R] {}
+ def apply[E, R] = new Mapper[E, R]
}
- implicit def convertRE[R, E](id: Id[R])(implicit ev: Mapper[E, R]): Id[E] = Id[E](id.value)
- implicit def convertER[E, R](id: Id[E])(implicit ev: Mapper[E, R]): Id[R] = Id[R](id.value)
+ implicit def convertRE[R, E](id: Id[R])(implicit mapper: Mapper[E, R]): Id[E] = mapper[E](id)
+ implicit def convertER[E, R](id: Id[E])(implicit mapper: Mapper[E, R]): Id[R] = mapper[R](id)
}
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 775fb27..08b1df2 100644
--- a/src/test/scala/xyz/driver/core/CoreTest.scala
+++ b/src/test/scala/xyz/driver/core/CoreTest.scala
@@ -47,15 +47,20 @@ class CoreTest extends FlatSpec with Matchers with MockitoSugar {
implicit val xy = Id.Mapper[X, Y]
implicit val yz = Id.Mapper[Y, Z]
- // The real test is that the following statements compile:
+ // Test that implicit conversions work correctly
val x = X(Id("0"))
val y = Y(x.id)
val z = Z(y.id)
val y2 = Y(z.id)
val x2 = X(y2.id)
-
(x2 === x) should be(true)
(y2 === y) should be(true)
+
+ // Test that type inferrence for explicit conversions work correctly
+ val yid = y.id
+ val xid = xy(yid)
+ val zid = yz(yid)
+ (xid: Id[X]) should be(zid: Id[Z])
}
"Time" should "use TimeZone correctly when converting to Date" in {