Enumeratees
Enumeratee is also defined using a trait and its companion object with the same Enumeratee
name.
It is defined as follows:
trait Enumeratee[From, To] { ... def applyOn[A](inner: Iteratee[To, A]): Iteratee[From, Iteratee[To, A]] def apply[A](inner: Iteratee[To, A]): Iteratee[From, Iteratee[To, A]] = applyOn[A](inner) ... }
An Enumeratee transforms the Iteratee given to it as input and returns a new Iteratee. Let's look at a method that defines an Enumeratee by implementing the applyOn
method. An Enumeratee's flatten
method accepts Future[Enumeratee]
and returns an another Enumeratee, which is defined as follows:
def flatten[From, To](futureOfEnumeratee: Future[Enumeratee[From, To]]) = new Enumeratee[From, To] { def applyOn[A](it: Iteratee[To, A]): Iteratee[From, Iteratee[To, A]] = Iteratee.flatten(futureOfEnumeratee.map(_.applyOn[A](it))(dec)) }
In the preceding snippet, applyOn
is called on the Enumeratee whose future is passed and dec
is defaultExecutionContext
.
Defining...