Skip to content

Commit a9ea8c3

Browse files
authored
Provide implicit conversions from scala.collection.Seq in Scala 2.13 and up (#176)
1 parent 8c4727e commit a9ea8c3

File tree

4 files changed

+63
-1
lines changed

4 files changed

+63
-1
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package plotly
2+
3+
trait MutableSequenceImplicitConversions {
4+
// Unneccessary in Scala 2.12, since the `Seq` alias refers to the supertype for mutable and immutable sequences
5+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package plotly
2+
3+
import plotly.Sequence.{DateTimes, Doubles, NestedDoubles, NestedInts, Strings}
4+
import plotly.element.LocalDateTime
5+
import scala.collection.{Seq => BaseScalaSeq}
6+
7+
trait MutableSequenceImplicitConversions {
8+
9+
implicit def fromMutableDoubleSeq(s: BaseScalaSeq[Double]): Sequence =
10+
Doubles(s.toSeq)
11+
implicit def fromMutableFloatSeq(s: BaseScalaSeq[Float]): Sequence =
12+
Doubles(s.map(_.toDouble).toSeq)
13+
implicit def fromMutableIntSeq(s: BaseScalaSeq[Int]): Sequence =
14+
Doubles(s.map(_.toDouble).toSeq)
15+
implicit def fromMutableLongSeq(s: BaseScalaSeq[Long]): Sequence =
16+
Doubles(s.map(_.toDouble).toSeq)
17+
implicit def fromMutableNestedDoubleSeq(s: BaseScalaSeq[BaseScalaSeq[Double]]): Sequence =
18+
NestedDoubles(s.map(_.toSeq).toSeq)
19+
implicit def fromMutableNestedIntSeq(s: BaseScalaSeq[BaseScalaSeq[Int]]): Sequence =
20+
NestedInts(s.map(_.toSeq).toSeq)
21+
implicit def fromMutableStringSeq(s: BaseScalaSeq[String]): Sequence =
22+
Strings(s.toSeq)
23+
implicit def fromMutableDateTimes(seq: BaseScalaSeq[LocalDateTime]): Sequence =
24+
DateTimes(seq.toSeq)
25+
26+
}

core/shared/src/main/scala/plotly/Sequence.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import plotly.element.LocalDateTime
44

55
sealed abstract class Sequence extends Product with Serializable
66

7-
object Sequence {
7+
object Sequence extends MutableSequenceImplicitConversions {
88
final case class Doubles(seq: Seq[Double]) extends Sequence
99
final case class NestedDoubles(seq: Seq[Seq[Double]]) extends Sequence
1010
final case class NestedInts(seq: Seq[Seq[Int]]) extends Sequence
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package plotly
2+
3+
import org.scalatest.FlatSpec
4+
5+
import scala.collection.mutable.ArrayBuffer
6+
7+
class SequenceTests extends FlatSpec {
8+
9+
"The implicit sequence conversion" should "convert a List to a Sequence" in {
10+
assert((List(1, 2, 3): Sequence) === Sequence.Doubles(List(1d, 2d, 3d)))
11+
}
12+
13+
it should "convert a mutable ArrayBuffer to a Sequence" in {
14+
assert((ArrayBuffer(1, 2, 3): Sequence) === Sequence.Doubles(List(1d, 2d, 3d)))
15+
}
16+
17+
it should "convert a nested mutable ArrayBuffer to a Sequence" in {
18+
val mutableNestedDoubles: ArrayBuffer[ArrayBuffer[Double]] = ArrayBuffer(
19+
ArrayBuffer(1d, 2d),
20+
ArrayBuffer(3d, 4d),
21+
)
22+
23+
val nestedDoublesList: List[List[Double]] = List(
24+
List(1d, 2d),
25+
List(3d, 4d),
26+
)
27+
28+
assert((mutableNestedDoubles: Sequence) === Sequence.NestedDoubles(nestedDoublesList))
29+
}
30+
31+
}

0 commit comments

Comments
 (0)