-
-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathGenerateStaticSignalCombineOps.scala
65 lines (61 loc) · 2.36 KB
/
GenerateStaticSignalCombineOps.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import sbt._
import java.io.File
case class GenerateStaticSignalCombineOps(
sourceDir: File,
from: Int,
to: Int
) extends SourceGenerator(
sourceDir / "scala" / "com" / "raquo" / "airstream" / "combine" / "generated" / s"StaticSignalCombineOps.scala"
) {
override def apply(): Unit = {
line("package com.raquo.airstream.combine.generated")
line()
line("import com.raquo.airstream.combine.CombineSignalN")
line("import com.raquo.airstream.core.Signal")
line("import com.raquo.airstream.core.Source.SignalSource")
line("import com.raquo.ew.JsArray")
line()
line("// #Warning do not edit this file directly, it is generated by GenerateStaticSignalCombineOps.scala")
line()
line("// These combine and combineWith methods are available on the Signal companion object")
line("// For instance methods of the same name, see CombinableSignal.scala")
line()
enter(s"object StaticSignalCombineOps {", "}") {
line()
for (n <- from to to) {
enter(s"def combine[${tupleType(n)}](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(s"): Signal[(${tupleType(n)})] = {", "}") {
line(s"combineWithFn(${tupleType(n, "s")})(Tuple${n}.apply[${tupleType(n)}])")
}
line()
line("/** @param combinator Must not throw! */")
enter(s"def combineWithFn[${tupleType(n)}, Out](") {
line((1 to n).map(i => s"s${i}: SignalSource[T${i}]").mkString(", "))
}
enter(")(") {
line(s"combinator: (${tupleType(n)}) => Out")
}
enter(s"): Signal[Out] = {", "}") {
// line(s"val parents = JsArray(${tupleType(n, "s", ".toObservable")})")
// line(s"val arrCombinator = (arr: JsArray[Any]) => combinator(${(0 until n).map(i => s"arr(${i}).asInstanceOf[T${i + 1}]").mkString(", ")})")
// enter("new CombineSignalN(", ")") {
// line("parents, arrCombinator")
// }
enter("new CombineSignalN[Any, Out](", ")") {
line(s"parents = JsArray(${tupleType(n, "s", ".toObservable")}),")
enter(s"combinator = arr => combinator(", ")") {
for (i <- 0 until n) {
line(s"arr(${i}).asInstanceOf[T${i+1}],")
}
}
}
}
line()
line("// --")
line()
}
}
}
}