diff options
author | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-22 18:04:47 -0500 |
---|---|---|
committer | Stewart Stewart <stewinsalot@gmail.com> | 2016-12-22 18:12:08 -0500 |
commit | 96accc4f5eb43f482afdc939f9e23ddb45ab725d (patch) | |
tree | fd75cb95db9bbd15c11f18598f8666345983c010 | |
parent | 3c22528e7f99e4b16327d6308c67b4be49d89efe (diff) | |
download | driver-core-96accc4f5eb43f482afdc939f9e23ddb45ab725d.tar.gz driver-core-96accc4f5eb43f482afdc939f9e23ddb45ab725d.tar.bz2 driver-core-96accc4f5eb43f482afdc939f9e23ddb45ab725d.zip |
add apply method to Id.Mapper for explicit conversions
-rw-r--r-- | src/main/scala/xyz/driver/core/core.scala | 5 | ||||
-rw-r--r-- | src/test/scala/xyz/driver/core/CoreTest.scala | 9 |
2 files changed, 11 insertions, 3 deletions
diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala index 1c92423..fb51f48 100644 --- a/src/main/scala/xyz/driver/core/core.scala +++ b/src/main/scala/xyz/driver/core/core.scala @@ -39,7 +39,10 @@ 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(id: Id[E]): Id[R] = Id[R](id.value) + def apply(id: Id[R])(implicit dummy: DummyImplicit): Id[E] = Id[E](id.value) + } object Mapper { def apply[E, R] = new Mapper[E, R] {} } diff --git a/src/test/scala/xyz/driver/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index 520fe8e..ded0c8d 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 { |