All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pi-generator.0.0.13.source-code.ScalaApiImpl.mustache Maven / Gradle / Ivy

Go to download

Internal module containing an annotation processor for generating the TaskBuilder API

The newest version!
package io.rouz.flo.dsl

import io.rouz.flo.Task
import io.rouz.flo.TaskBuilder
import io.rouz.flo.TaskContext.Value
import io.rouz.flo._

import _root_.scala.collection.JavaConversions
import _root_.scala.reflect.ClassTag

import io.rouz.flo.dsl.Util._

private[dsl] class Builder0[Z: ClassTag](val name: String, val args: Any*) extends TaskBuilder0[Z] { self =>

  private val cls = implicitly[ClassTag[Z]].runtimeClass.asInstanceOf[Class[Z]]
  private val builder = Task
      .named(name, args.asInstanceOf[Seq[AnyRef]]:_*)
      .ofType(cls)

  override def process(fn: => Z): Task[Z] =
    builder.process(f0(fn))

  override def processWithContext(fn: (TaskContext) => Value[Z]): Task[Z] =
    builder.processWithContext(f1(fn))

  override def op[A1](opProvider: OpProvider[A1]): TaskBuilder1[A1, Z] = new Builder1[A1, Z] {
    type J1 = A1
    val c1: J1 => A1 = identity
    val builder = self.builder.op(opProvider)
  }

  override def in[A1](task: => Task[A1]): TaskBuilder1[A1, Z] = new Builder1[A1, Z] {
    type J1 = A1
    val c1: J1 => A1 = identity
    val builder = self.builder.in(fn(task))
  }

  override def ins[A1](tasks: => List[Task[A1]]) = new Builder1[List[A1], Z] {
    type J1 = java.util.List[A1]
    val c1: J1 => List[A1] = JavaConversions.iterableAsScalaIterable(_).toList
    val builder = self.builder.ins(javaList(tasks))
  }
}
{{#genBuilder}}

private[dsl] trait Builder{{arity}}[{{typeArgsNumA}}, Z] extends TaskBuilder{{arity}}[{{typeArgsNumA}}, Z] {
  self =>
  {{^iter.isFirst}}

  // previous builder
  val p: Builder{{arityMinus}}[{{typeArgsNumAMinus}},Z]
  {{/iter.isFirst}}

  type J{{arity}}
  val c{{arity}}: J{{arity}} => A{{arity}}
  val builder: TaskBuilder.TaskBuilder{{arity}}[{{typeArgsPsJ}}, Z]

  override def process(fn: ({{typeArgsNumA}}) => Z): Task[Z] =
    builder.process(f{{arity}}(
      ({{argumentsNum}}) => fn({{argumentsPsConv}})
    ))

  override def processWithContext(fn: (TaskContext) => ({{typeArgsNumA}}) => Value[Z]): Task[Z] =
    builder.processWithContext(f{{arityPlus}}(
      (tc, {{argumentsNum}}) => fn(tc)({{argumentsPsConv}})
    ))
  {{^iter.isLast}}

  override def op[A{{arityPlus}}](opProvider: OpProvider[A{{arityPlus}}]): TaskBuilder{{arityPlus}}[{{typeArgsNumA}}, A{{arityPlus}}, Z] =
    new Builder{{arityPlus}}[{{typeArgsNumA}}, A{{arityPlus}}, Z] {
      type J{{arityPlus}} = A{{arityPlus}}
      val c{{arityPlus}}: J{{arityPlus}} => A{{arityPlus}} = identity
      val p: self.type = self
      val builder = self.builder.op(opProvider)
    }

  override def in[A{{arityPlus}}](task: => Task[A{{arityPlus}}]): TaskBuilder{{arityPlus}}[{{typeArgsNumA}}, A{{arityPlus}}, Z] =
    new Builder{{arityPlus}}[{{typeArgsNumA}}, A{{arityPlus}}, Z] {
      type J{{arityPlus}} = A{{arityPlus}}
      val c{{arityPlus}}: J{{arityPlus}} => A{{arityPlus}} = identity
      val p: self.type = self
      val builder = self.builder.in(fn(task))
    }

  override def ins[A{{arityPlus}}](tasks: => List[Task[A{{arityPlus}}]]): TaskBuilder{{arityPlus}}[{{typeArgsNumA}}, List[A{{arityPlus}}], Z] =
    new Builder{{arityPlus}}[{{typeArgsNumA}}, List[A{{arityPlus}}], Z] {
      type J{{arityPlus}} = java.util.List[A{{arityPlus}}]
      val c{{arityPlus}}: J{{arityPlus}} => List[A{{arityPlus}}] = JavaConversions.iterableAsScalaIterable(_).toList
      val p: self.type = self
      val builder = self.builder.ins(javaList(tasks))
    }
  {{/iter.isLast}}
}
{{/genBuilder}}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy