aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Stewart <stewinsalot@gmail.com>2016-12-18 17:03:16 -0500
committerStewart Stewart <stewinsalot@gmail.com>2016-12-18 17:03:16 -0500
commit415c88db0447bc94ae1624f28dcc4cc9b2d4be63 (patch)
tree3df82c939fe45e42e4f60ee90d1a3c90395aab45
parentf1c50e2cbe757926df7a94284eb0246c66394779 (diff)
downloaddriver-core-415c88db0447bc94ae1624f28dcc4cc9b2d4be63.tar.gz
driver-core-415c88db0447bc94ae1624f28dcc4cc9b2d4be63.tar.bz2
driver-core-415c88db0447bc94ae1624f28dcc4cc9b2d4be63.zip
scope SameId to Id
-rw-r--r--src/main/scala/xyz/driver/core/core.scala52
1 files changed, 25 insertions, 27 deletions
diff --git a/src/main/scala/xyz/driver/core/core.scala b/src/main/scala/xyz/driver/core/core.scala
index 1a6bdd7..c88c998 100644
--- a/src/main/scala/xyz/driver/core/core.scala
+++ b/src/main/scala/xyz/driver/core/core.scala
@@ -25,31 +25,6 @@ package object core {
package core {
- /**
- * Evidence that Id[A] can be safely converted to Id[B].
- * e.g. `implicit val CaseId = Id.sameId[Case, CasesRow]`
- * if `CaseId` is in scope, we can use either of:
- * `casesRowId.asId[Case]` or `caseId.asId[CasesRow]`
- * Override convert for custom Id conversions.
- */
- @implicitNotFound("No evidence that ${A} has the same Id as ${B}")
- sealed trait SameId[A, B] {
- def convert(id: Id[A]): Id[B] = Id[B](id.value)
- }
-
- object SameId extends LowPrioritySameIdImplicits {
- def apply[A, B] = new SameId[A, B] {}
-
- implicit def reflexive[A]: A ~ A = SameId[A, A]
- implicit def symmetric[A, B](implicit ab: A ~ B): B ~ A = SameId[B, A]
- }
-
- trait LowPrioritySameIdImplicits {
- protected type ~[A, B] = SameId[A, B]
-
- implicit def transitive[A, B, C](implicit ab: A ~ B, bc: B ~ C): A ~ C = SameId[A, C]
- }
-
final case class Id[+Tag](value: String) extends AnyVal {
@inline def length: Int = value.length
override def toString: String = value
@@ -59,11 +34,34 @@ 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)
+ /**
+ * Evidence that Id[A] can be safely converted to Id[B].
+ * e.g. `implicit val CaseId = Id.SameId[Case, CasesRow]`
+ * if `CaseId` is in scope, we can use either of:
+ * `casesRowId.asId[Case]` or `caseId.asId[CasesRow]`
+ * Override convert for custom Id conversions.
+ */
+ @implicitNotFound("No evidence that ${A} has the same Id as ${B}")
+ sealed trait SameId[A, B] {
+ def convert(id: Id[A]): Id[B] = Id[B](id.value)
+ }
+
+ object SameId extends LowPrioritySameIdImplicits {
+ def apply[A, B] = new SameId[A, B] {}
+
+ implicit def reflexive[A]: A ~ A = SameId[A, A]
+ implicit def symmetric[A, B](implicit ab: A ~ B): B ~ A = SameId[B, A]
+ }
+
+ trait LowPrioritySameIdImplicits {
+ protected type ~[A, B] = SameId[A, B]
+
+ implicit def transitive[A, B, C](implicit ab: A ~ B, bc: B ~ C): A ~ C = SameId[A, C]
+ }
+
implicit class InvariantIdOps[Tag](id: Id[Tag]) {
def asId[T](implicit eq: SameId[Tag, T]): Id[T] = eq.convert(id)
}
-
- def sameId[A, B] = SameId[A, B]
}
final case class Name[+Tag](value: String) extends AnyVal {