From 02761adbf055674f6e058703bf37ef67521cfec5 Mon Sep 17 00:00:00 2001 From: edmisml Date: Wed, 29 Dec 2021 13:28:12 -0600 Subject: [PATCH 1/3] generic as its own module + rm shape dep from core --- build.sbt | 16 ++++++++++++++-- .../main/scala/neotypes/generic/Exported.scala | 2 +- core/src/test/scala/neotypes/MapperSpec.scala | 2 +- .../generic/DerivedCaseClassArgMapper.scala | 0 .../neotypes/generic/DerivedResultMapper.scala | 0 .../scala/neotypes/generic/ExportMacros.scala | 0 .../neotypes/generic/ReprResultMapper.scala | 4 +++- .../src/main/scala/neotypes/generic/auto.scala | 0 .../main/scala/neotypes/generic/semiauto.scala | 0 .../generic/AnyValMappersSemiautoSpec.scala | 0 .../generic/CaseClassArgMapperAutoSpec.scala | 0 .../generic/CaseClassArgMapperSemiautoSpec.scala | 0 .../neotypes/generic/ResultMapperAutoSpec.scala | 0 .../generic/ResultMapperSemiautoSpec.scala | 0 14 files changed, 19 insertions(+), 5 deletions(-) rename {core => generic}/src/main/scala/neotypes/generic/DerivedCaseClassArgMapper.scala (100%) rename {core => generic}/src/main/scala/neotypes/generic/DerivedResultMapper.scala (100%) rename {core => generic}/src/main/scala/neotypes/generic/ExportMacros.scala (100%) rename {core => generic}/src/main/scala/neotypes/generic/ReprResultMapper.scala (94%) rename {core => generic}/src/main/scala/neotypes/generic/auto.scala (100%) rename {core => generic}/src/main/scala/neotypes/generic/semiauto.scala (100%) rename {core/src/test/scala => generic/src/test}/neotypes/generic/AnyValMappersSemiautoSpec.scala (100%) rename {core/src/test/scala => generic/src/test}/neotypes/generic/CaseClassArgMapperAutoSpec.scala (100%) rename {core/src/test/scala => generic/src/test}/neotypes/generic/CaseClassArgMapperSemiautoSpec.scala (100%) rename {core/src/test/scala => generic/src/test}/neotypes/generic/ResultMapperAutoSpec.scala (100%) rename {core/src/test/scala => generic/src/test}/neotypes/generic/ResultMapperSemiautoSpec.scala (100%) diff --git a/build.sbt b/build.sbt index 6a0909e4d..894946640 100644 --- a/build.sbt +++ b/build.sbt @@ -129,7 +129,7 @@ lazy val core = (project in file("core")) PROVIDED( "org.neo4j.driver" % "neo4j-java-driver" % neo4jDriverVersion ) ++ COMPILE( - "com.chuusai" %% "shapeless" % shapelessVersion, + // "com.chuusai" %% "shapeless" % shapelessVersion, "org.scala-lang.modules" %% "scala-collection-compat" % scalaCollectionCompatVersion, scalaVersion("org.scala-lang" % "scala-reflect" % _).value ) ++ TEST( @@ -139,7 +139,8 @@ lazy val core = (project in file("core")) "org.testcontainers" % "neo4j" % testcontainersNeo4jVersion, "org.mockito" % "mockito-all" % mockitoVersion, "ch.qos.logback" % "logback-classic" % logbackVersion - ) + ), + dependsOn() ) def enablePartialUnificationIn2_12(scalaVersion: String) = @@ -263,6 +264,17 @@ lazy val enumeratum = (project in file("enumeratum")) ) ) +lazy val generic = (project in file("generic")) + .dependsOn(core % "compile->compile;test->test;provided->provided") + .settings(commonSettings) + .settings( + name := "neotypes-generic", + libraryDependencies ++= COMPILE( + "com.chuusai" %% "shapeless" % shapelessVersion, + scalaVersion("org.scala-lang" % "scala-reflect" % _).value + ), + ) + lazy val docsMappingsAPIDir = settingKey[String]("Name of subdirectory in site target directory for api docs") lazy val microsite = (project in file("site")) diff --git a/core/src/main/scala/neotypes/generic/Exported.scala b/core/src/main/scala/neotypes/generic/Exported.scala index c9d8caa1e..7c81aa29e 100644 --- a/core/src/main/scala/neotypes/generic/Exported.scala +++ b/core/src/main/scala/neotypes/generic/Exported.scala @@ -1,3 +1,3 @@ package neotypes.generic -final case class Exported[+T](instance: T) extends AnyVal +final case class Exported[+T](instance: T) extends AnyVal \ No newline at end of file diff --git a/core/src/test/scala/neotypes/MapperSpec.scala b/core/src/test/scala/neotypes/MapperSpec.scala index 5e7d94f67..f0bfacaa9 100644 --- a/core/src/test/scala/neotypes/MapperSpec.scala +++ b/core/src/test/scala/neotypes/MapperSpec.scala @@ -1,6 +1,6 @@ package neotypes -import neotypes.generic.auto._ +// import neotypes.generic.auto._ import neotypes.mappers.{ResultMapper, TypeHint, ValueMapper} import org.neo4j.driver.internal.value.{IntegerValue, StringValue} import org.neo4j.driver.Value diff --git a/core/src/main/scala/neotypes/generic/DerivedCaseClassArgMapper.scala b/generic/src/main/scala/neotypes/generic/DerivedCaseClassArgMapper.scala similarity index 100% rename from core/src/main/scala/neotypes/generic/DerivedCaseClassArgMapper.scala rename to generic/src/main/scala/neotypes/generic/DerivedCaseClassArgMapper.scala diff --git a/core/src/main/scala/neotypes/generic/DerivedResultMapper.scala b/generic/src/main/scala/neotypes/generic/DerivedResultMapper.scala similarity index 100% rename from core/src/main/scala/neotypes/generic/DerivedResultMapper.scala rename to generic/src/main/scala/neotypes/generic/DerivedResultMapper.scala diff --git a/core/src/main/scala/neotypes/generic/ExportMacros.scala b/generic/src/main/scala/neotypes/generic/ExportMacros.scala similarity index 100% rename from core/src/main/scala/neotypes/generic/ExportMacros.scala rename to generic/src/main/scala/neotypes/generic/ExportMacros.scala diff --git a/core/src/main/scala/neotypes/generic/ReprResultMapper.scala b/generic/src/main/scala/neotypes/generic/ReprResultMapper.scala similarity index 94% rename from core/src/main/scala/neotypes/generic/ReprResultMapper.scala rename to generic/src/main/scala/neotypes/generic/ReprResultMapper.scala index 39ca54565..7a924aaf6 100644 --- a/core/src/main/scala/neotypes/generic/ReprResultMapper.scala +++ b/generic/src/main/scala/neotypes/generic/ReprResultMapper.scala @@ -19,7 +19,9 @@ object ReprResultMapper { nmap.keys.asScala.iterator.map(key => key -> nmap.get(key)) implicit final val HNilResultMapper: ReprResultMapper[HNil] = { - val rm = ResultMapper.fromValueMapper[HNil](ValueMapper.HNilMapper) + // val rm = ResultMapper.fromValueMapper[HNil](ValueMapper.HNilMapper) + // TODO HNil mapper coming from orphan instances package obj + val rm = ResultMapper.fromValueMapper[HNil](HNilMapper) new ReprResultMapper[HNil] { override def to(value: List[(String, Value)], typeHint: Option[TypeHint]): Either[Throwable, HNil] = diff --git a/core/src/main/scala/neotypes/generic/auto.scala b/generic/src/main/scala/neotypes/generic/auto.scala similarity index 100% rename from core/src/main/scala/neotypes/generic/auto.scala rename to generic/src/main/scala/neotypes/generic/auto.scala diff --git a/core/src/main/scala/neotypes/generic/semiauto.scala b/generic/src/main/scala/neotypes/generic/semiauto.scala similarity index 100% rename from core/src/main/scala/neotypes/generic/semiauto.scala rename to generic/src/main/scala/neotypes/generic/semiauto.scala diff --git a/core/src/test/scala/neotypes/generic/AnyValMappersSemiautoSpec.scala b/generic/src/test/neotypes/generic/AnyValMappersSemiautoSpec.scala similarity index 100% rename from core/src/test/scala/neotypes/generic/AnyValMappersSemiautoSpec.scala rename to generic/src/test/neotypes/generic/AnyValMappersSemiautoSpec.scala diff --git a/core/src/test/scala/neotypes/generic/CaseClassArgMapperAutoSpec.scala b/generic/src/test/neotypes/generic/CaseClassArgMapperAutoSpec.scala similarity index 100% rename from core/src/test/scala/neotypes/generic/CaseClassArgMapperAutoSpec.scala rename to generic/src/test/neotypes/generic/CaseClassArgMapperAutoSpec.scala diff --git a/core/src/test/scala/neotypes/generic/CaseClassArgMapperSemiautoSpec.scala b/generic/src/test/neotypes/generic/CaseClassArgMapperSemiautoSpec.scala similarity index 100% rename from core/src/test/scala/neotypes/generic/CaseClassArgMapperSemiautoSpec.scala rename to generic/src/test/neotypes/generic/CaseClassArgMapperSemiautoSpec.scala diff --git a/core/src/test/scala/neotypes/generic/ResultMapperAutoSpec.scala b/generic/src/test/neotypes/generic/ResultMapperAutoSpec.scala similarity index 100% rename from core/src/test/scala/neotypes/generic/ResultMapperAutoSpec.scala rename to generic/src/test/neotypes/generic/ResultMapperAutoSpec.scala diff --git a/core/src/test/scala/neotypes/generic/ResultMapperSemiautoSpec.scala b/generic/src/test/neotypes/generic/ResultMapperSemiautoSpec.scala similarity index 100% rename from core/src/test/scala/neotypes/generic/ResultMapperSemiautoSpec.scala rename to generic/src/test/neotypes/generic/ResultMapperSemiautoSpec.scala From 2b80097183409ddfb1ad7d69ae08c539e4671a4d Mon Sep 17 00:00:00 2001 From: edmisml Date: Wed, 29 Dec 2021 13:28:56 -0600 Subject: [PATCH 2/3] Exported as object within core --- generic/src/main/scala/neotypes/generic/Exported.scala | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 generic/src/main/scala/neotypes/generic/Exported.scala diff --git a/generic/src/main/scala/neotypes/generic/Exported.scala b/generic/src/main/scala/neotypes/generic/Exported.scala new file mode 100644 index 000000000..c9d8caa1e --- /dev/null +++ b/generic/src/main/scala/neotypes/generic/Exported.scala @@ -0,0 +1,3 @@ +package neotypes.generic + +final case class Exported[+T](instance: T) extends AnyVal From 54c6272baccad1c812f8dd8a89d202035ea7e22e Mon Sep 17 00:00:00 2001 From: edmisml Date: Wed, 29 Dec 2021 13:29:55 -0600 Subject: [PATCH 3/3] rm shapeless dep in mappers, add HNil ValueMapper as orphan instance in generic --- core/src/main/scala/neotypes/mappers.scala | 8 +++++--- .../src/main/scala/neotypes/generic/package.scala | 12 ++++++++++++ 2 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 generic/src/main/scala/neotypes/generic/package.scala diff --git a/core/src/main/scala/neotypes/mappers.scala b/core/src/main/scala/neotypes/mappers.scala index b194dc7ef..85ebcca12 100644 --- a/core/src/main/scala/neotypes/mappers.scala +++ b/core/src/main/scala/neotypes/mappers.scala @@ -13,7 +13,7 @@ import org.neo4j.driver.internal.value.{MapValue, NodeValue, RelationshipValue} import org.neo4j.driver.Value import org.neo4j.driver.summary.ResultSummary import org.neo4j.driver.types.{IsoDuration, MapAccessor => NMap, Node, Path => NPath, Point, Relationship} -import shapeless.HNil +// import shapeless.HNil import scala.collection.Iterable import scala.collection.compat._ @@ -482,8 +482,10 @@ object mappers { implicit final val FloatValueMapper: ValueMapper[Float] = ValueMapper.fromCast(v => v.asFloat) - implicit final val HNilMapper: ValueMapper[HNil] = - ValueMapper.const(HNil) + + // TODO moved temporarily to generic orphan instances + // implicit final val HNilMapper: ValueMapper[HNil] = + // ValueMapper.const(HNil) implicit final val IntValueMapper: ValueMapper[Int] = ValueMapper.fromCast(v => v.asInt) diff --git a/generic/src/main/scala/neotypes/generic/package.scala b/generic/src/main/scala/neotypes/generic/package.scala new file mode 100644 index 000000000..14903b438 --- /dev/null +++ b/generic/src/main/scala/neotypes/generic/package.scala @@ -0,0 +1,12 @@ +package neotypes + +import neotypes.mappers.ValueMapper +import shapeless.HNil + +package object generic extends OrphanInstances + +trait OrphanInstances { + implicit final val HNilMapper: ValueMapper[HNil] = + ValueMapper.const(HNil) + +}