Skip to content

Commit f2d3dce

Browse files
committed
Replace HList by Tuple
1 parent f50d1a0 commit f2d3dce

File tree

2 files changed

+18
-17
lines changed

2 files changed

+18
-17
lines changed

gremlin-scala/src/main/scala/gremlin/scala/GremlinScala.scala

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.{Bytecode, Path, Scope, Tr
3333
import org.apache.tinkerpop.gremlin.structure.{Direction, T}
3434
import shapeless.{::, HList, HNil}
3535
import shapeless.ops.hlist.{IsHCons, Mapper, Prepend, RightFolder, ToTraversable, Tupler}
36+
import shapeless.ops.tuple.{Prepend => TuplePrepend}
3637
import shapeless.ops.product.ToHList
38+
import shapeless.syntax.std.tuple._
3739
import scala.concurrent.duration.FiniteDuration
3840
import scala.reflect.runtime.{universe => ru}
3941
import scala.collection.{immutable, mutable}
@@ -117,8 +119,8 @@ class GremlinScala[End](val traversal: GraphTraversal[_, End]) {
117119
otherProjectKeys: String*): GremlinScala.Aux[JMap[String, A], Labels] =
118120
GremlinScala[JMap[String, A], Labels](traversal.project(projectKey, otherProjectKeys: _*))
119121

120-
def project[H <: HList](
121-
builder: ProjectionBuilder[HNil] ProjectionBuilder[H]): GremlinScala[H] =
122+
def project[H <: Product](
123+
builder: ProjectionBuilder[Nil.type] ProjectionBuilder[H]): GremlinScala[H] =
122124
builder(ProjectionBuilder()).build(this)
123125

124126
/** You might think that predicate should be `GremlinScala[End] => GremlinScala[Boolean]`,
@@ -1033,27 +1035,27 @@ class GremlinScala[End](val traversal: GraphTraversal[_, End]) {
10331035

10341036
}
10351037

1036-
class ProjectionBuilder[H <: HList] private[gremlin] (
1038+
class ProjectionBuilder[T <: Product] private[gremlin] (
10371039
labels: Seq[String],
10381040
addBy: GraphTraversal[_, JMap[String, Any]] GraphTraversal[_, JMap[String, Any]],
1039-
buildResult: JMap[String, Any] H) {
1041+
buildResult: JMap[String, Any] T) {
10401042

1041-
def apply[U, HR <: HList](by: By[U])(
1042-
implicit prepend: Prepend.Aux[H, U :: HNil, HR]): ProjectionBuilder[HR] = {
1043+
def apply[U, TR <: Product](by: By[U])(
1044+
implicit prepend: TuplePrepend.Aux[T, Tuple1[U], TR]): ProjectionBuilder[TR] = {
10431045
val label = UUID.randomUUID().toString
1044-
new ProjectionBuilder[HR](labels :+ label,
1046+
new ProjectionBuilder[TR](labels :+ label,
10451047
addBy.andThen(by.apply),
10461048
map buildResult(map) :+ map.get(label).asInstanceOf[U])
10471049
}
10481050

1049-
def and[U, HR <: HList](by: By[U])(
1050-
implicit prepend: Prepend.Aux[H, U :: HNil, HR]): ProjectionBuilder[HR] = apply(by)
1051+
def and[U, TR <: Product](by: By[U])
1052+
(implicit prepend: TuplePrepend.Aux[T, Tuple1[U], TR]): ProjectionBuilder[TR] = apply(by)
10511053

1052-
private[gremlin] def build(g: GremlinScala[_]): GremlinScala[H] = {
1054+
private[gremlin] def build(g: GremlinScala[_]): GremlinScala[T] = {
10531055
GremlinScala(addBy(g.traversal.project(labels.head, labels.tail: _*))).map(buildResult)
10541056
}
10551057
}
10561058

10571059
object ProjectionBuilder {
1058-
def apply() = new ProjectionBuilder[HNil](Nil, scala.Predef.identity, _ HNil)
1060+
def apply() = new ProjectionBuilder[Nil.type](Nil, scala.Predef.identity, _ Nil)
10591061
}

gremlin-scala/src/test/scala/gremlin/scala/ProjectSpec.scala

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package gremlin.scala
22

33
import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory
44
import org.scalatest.{Matchers, WordSpec}
5-
import shapeless.HNil
65

76
class ProjectSpec extends WordSpec with Matchers {
87
def graph: ScalaGraph = TinkerFactory.createModern.asScala()
@@ -17,10 +16,10 @@ class ProjectSpec extends WordSpec with Matchers {
1716
.toList()
1817

1918
result shouldBe List(
20-
"lop" :: 3 :: HNil,
21-
"lop" :: 3 :: HNil,
22-
"lop" :: 3 :: HNil,
23-
"ripple" :: 1 :: HNil
19+
("lop", 3),
20+
("lop",3),
21+
("lop",3),
22+
("ripple", 1)
2423
)
2524
}
2625

@@ -32,7 +31,7 @@ class ProjectSpec extends WordSpec with Matchers {
3231
.and(By(__.inE().count())))
3332
.head()
3433

35-
result shouldBe (3 :: 0 :: HNil)
34+
result shouldBe (3, 0)
3635
}
3736
}
3837
}

0 commit comments

Comments
 (0)