From db602b56d06efb9124e1ee7825f965d0bb9d7889 Mon Sep 17 00:00:00 2001 From: Jacob Wang Date: Mon, 9 Sep 2024 21:08:05 +0100 Subject: [PATCH] Add {Write.Read}.generic back to help migrate from earlier versions These methods are used by users to derive instances explicitly in previous versions. The implicit keywords are removed so they don't affect implicit search --- .../{GetPlatform.scala => MkGetPlatform.scala} | 2 +- .../{PutPlatform.scala => MkPutPlatform.scala} | 2 +- .../main/scala-2/doobie/util/ReadPlatform.scala | 3 +++ .../main/scala-2/doobie/util/WritePlatform.scala | 4 ++++ .../{GetPlatform.scala => MkGetPlatform.scala} | 2 +- .../{PutPlatform.scala => MkPutPlatform.scala} | 2 +- modules/core/src/main/scala/doobie/util/get.scala | 3 ++- modules/core/src/main/scala/doobie/util/put.scala | 3 ++- .../scala-2/doobie/util/PutSuitePlatform.scala | 15 +++++---------- .../test/scala/doobie/testutils/TestClasses.scala | 2 ++ 10 files changed, 22 insertions(+), 16 deletions(-) rename modules/core/src/main/scala-2/doobie/util/{GetPlatform.scala => MkGetPlatform.scala} (96%) rename modules/core/src/main/scala-2/doobie/util/{PutPlatform.scala => MkPutPlatform.scala} (96%) rename modules/core/src/main/scala-3/doobie/util/{GetPlatform.scala => MkGetPlatform.scala} (96%) rename modules/core/src/main/scala-3/doobie/util/{PutPlatform.scala => MkPutPlatform.scala} (96%) diff --git a/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala b/modules/core/src/main/scala-2/doobie/util/MkGetPlatform.scala similarity index 96% rename from modules/core/src/main/scala-2/doobie/util/GetPlatform.scala rename to modules/core/src/main/scala-2/doobie/util/MkGetPlatform.scala index 0274fe4d4..1a805d0e1 100644 --- a/modules/core/src/main/scala-2/doobie/util/GetPlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/MkGetPlatform.scala @@ -7,7 +7,7 @@ package doobie.util import shapeless._ import shapeless.ops.hlist.IsHCons -trait GetPlatform { +trait MkGetPlatform { import doobie.util.compat.=:= /** @group Instances */ diff --git a/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala b/modules/core/src/main/scala-2/doobie/util/MkPutPlatform.scala similarity index 96% rename from modules/core/src/main/scala-2/doobie/util/PutPlatform.scala rename to modules/core/src/main/scala-2/doobie/util/MkPutPlatform.scala index 9b946f158..2a4d32c3b 100644 --- a/modules/core/src/main/scala-2/doobie/util/PutPlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/MkPutPlatform.scala @@ -7,7 +7,7 @@ package doobie.util import shapeless._ import shapeless.ops.hlist.IsHCons -trait PutPlatform { +trait MkPutPlatform { import doobie.util.compat.=:= /** @group Instances */ diff --git a/modules/core/src/main/scala-2/doobie/util/ReadPlatform.scala b/modules/core/src/main/scala-2/doobie/util/ReadPlatform.scala index 44d4a4b65..64a5e7371 100644 --- a/modules/core/src/main/scala-2/doobie/util/ReadPlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/ReadPlatform.scala @@ -29,4 +29,7 @@ trait ReadPlatform { MkRead.ogeneric[A, Repr] } + @deprecated("Use Read.derived instead to derive instances explicitly", "1.0.0-RC6") + def generic[T, Repr](implicit gen: Generic.Aux[T, Repr], G: Lazy[MkRead[Repr]]): MkRead[T] = + MkRead.generic[T, Repr] } diff --git a/modules/core/src/main/scala-2/doobie/util/WritePlatform.scala b/modules/core/src/main/scala-2/doobie/util/WritePlatform.scala index 60fc9fb32..0553067d2 100644 --- a/modules/core/src/main/scala-2/doobie/util/WritePlatform.scala +++ b/modules/core/src/main/scala-2/doobie/util/WritePlatform.scala @@ -27,4 +27,8 @@ trait WritePlatform { val _ = isTuple MkWrite.ogeneric[A, Repr] } + + @deprecated("Use Write.derived instead to derive instances explicitly", "1.0.0-RC6") + def generic[T, Repr](implicit gen: Generic.Aux[T, Repr], A: Lazy[MkWrite[Repr]]): MkWrite[T] = + MkWrite.generic[T, Repr] } diff --git a/modules/core/src/main/scala-3/doobie/util/GetPlatform.scala b/modules/core/src/main/scala-3/doobie/util/MkGetPlatform.scala similarity index 96% rename from modules/core/src/main/scala-3/doobie/util/GetPlatform.scala rename to modules/core/src/main/scala-3/doobie/util/MkGetPlatform.scala index 7011a60c8..c44c14fab 100644 --- a/modules/core/src/main/scala-3/doobie/util/GetPlatform.scala +++ b/modules/core/src/main/scala-3/doobie/util/MkGetPlatform.scala @@ -6,7 +6,7 @@ package doobie.util import scala.deriving.Mirror -trait GetPlatform: +trait MkGetPlatform: // Get is available for single-element products. given x[P <: Product, A]( diff --git a/modules/core/src/main/scala-3/doobie/util/PutPlatform.scala b/modules/core/src/main/scala-3/doobie/util/MkPutPlatform.scala similarity index 96% rename from modules/core/src/main/scala-3/doobie/util/PutPlatform.scala rename to modules/core/src/main/scala-3/doobie/util/MkPutPlatform.scala index 60ffa7b29..5e4a8f283 100644 --- a/modules/core/src/main/scala-3/doobie/util/PutPlatform.scala +++ b/modules/core/src/main/scala-3/doobie/util/MkPutPlatform.scala @@ -6,7 +6,7 @@ package doobie.util import scala.deriving.Mirror -trait PutPlatform: +trait MkPutPlatform: // Put is available for single-element products. given [P <: Product, A]( diff --git a/modules/core/src/main/scala/doobie/util/get.scala b/modules/core/src/main/scala/doobie/util/get.scala index bbfeb45b9..87ca8f5ca 100644 --- a/modules/core/src/main/scala/doobie/util/get.scala +++ b/modules/core/src/main/scala/doobie/util/get.scala @@ -221,7 +221,8 @@ sealed abstract class MkGet[A]( override val vendorTypeNames: List[String], override val get: Coyoneda[(ResultSet, Int) => *, A] ) extends Get[A](typeStack, jdbcSources, jdbcSourceSecondary, vendorTypeNames, get) -object MkGet extends GetPlatform { + +object MkGet extends MkGetPlatform { def lift[A](g: Get[A]): MkGet[A] = new MkGet[A]( diff --git a/modules/core/src/main/scala/doobie/util/put.scala b/modules/core/src/main/scala/doobie/util/put.scala index 93a0d5a09..395021d15 100644 --- a/modules/core/src/main/scala/doobie/util/put.scala +++ b/modules/core/src/main/scala/doobie/util/put.scala @@ -234,7 +234,8 @@ sealed abstract class MkPut[A]( override val put: ContravariantCoyoneda[(PreparedStatement, Int, *) => Unit, A], override val update: ContravariantCoyoneda[(ResultSet, Int, *) => Unit, A] ) extends Put[A](typeStack, jdbcTargets, vendorTypeNames, put, update) -object MkPut extends PutPlatform { + +object MkPut extends MkPutPlatform { def lift[A](g: Put[A]): MkPut[A] = new MkPut[A]( diff --git a/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala b/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala index 3237f6bf5..3d8293d26 100644 --- a/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala +++ b/modules/core/src/test/scala-2/doobie/util/PutSuitePlatform.scala @@ -4,31 +4,26 @@ package doobie.util import doobie.testutils.{VoidExtensions, assertContains} +import doobie.testutils.TestClasses.CCAnyVal -object PutSuitePlatform { - final case class Y(x: String) extends AnyVal - final case class P(x: Int) extends AnyVal -} +object PutSuitePlatform {} trait PutSuitePlatform { self: munit.FunSuite => - import PutSuitePlatform._ - test("Put can be auto derived for unary products (AnyVal)") { import doobie.generic.auto._ - Put[Y].void - Put[P].void + Put[CCAnyVal].void } test("Put can be explicitly derived for unary products (AnyVal)") { - Put.derived[Y].void - Put.derived[P].void + Put.derived[CCAnyVal].void } test("Put should not be derived for non-unary products") { import doobie.generic.auto._ import doobie.testutils.TestClasses.{CCIntString, PlainObj} + println(compileErrors("Put[CCIntString]")) assertContains(compileErrors("Put[CCIntString]"), "implicit value") assertContains(compileErrors("Put[(Int, Int)]"), "implicit value") assertContains(compileErrors("Put[PlainObj.type]"), "implicit value") diff --git a/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala b/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala index c39e21269..27fe46061 100644 --- a/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala +++ b/modules/testutils/src/test/scala/doobie/testutils/TestClasses.scala @@ -16,5 +16,7 @@ object TestClasses { case class CCIntString(i: Int, s: String) + case class CCAnyVal(s: String) extends AnyVal + object PlainObj }