final case class AndThen[-I, OI, +O, +E](upstream: Evolution[OI, O, E], downstream: Evolution[I, OI, E]) extends Evolution[I, O, E] with Product with Serializable
An Evolution composed of two sequential evolutions.
Parameter naming
The field names are intentionally the reverse of Stage.AndThen. In Stage.AndThen, upstream processes
I → OI and downstream processes OI → O. Here it is the other way around:
downstream: Evolution[I, OI, E]— holds the evolution of the pipeline's upstream stage (I → OI).upstream: Evolution[OI, O, E]— holds the evolution of the pipeline's downstream stage (OI → O).
The inversion follows from how <~ routes data: upstream(s) <~ downstream(s) feeds downstream's stage first,
so the I → OI evolution occupies downstream and OI → O occupies upstream. compose stores its receiver as
downstream and its argument as upstream:
pipelineUpstream.skip().compose(pipelineDownstream.skip()) // == Evolution.AndThen(upstream = pipelineDownstream.skip(), // downstream = pipelineUpstream.skip())
Continuation composition
For any status s:
composed(s) == upstream(s) <~ downstream(s)
// data flow: I → downstream's stage → OI → upstream's stage → ODisposal
Both evolutions are disposed in the order upstream then downstream (i.e. pipeline-downstream first, then
pipeline-upstream), matching the reverse-order convention used in Stage.AndThen before disposal was moved to
Evolution.
- I
input type of the composed pipeline
- OI
intermediate type between the two stages
- O
output type of the composed pipeline
- E
error type
- upstream
the evolution of the pipeline's downstream stage (
OI → O)- downstream
the evolution of the pipeline's upstream stage (
I → OI)
- Source
- Evolution.scala
- Alphabetic
- By Inheritance
- AndThen
- Serializable
- Product
- Equals
- Evolution
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
Value Members
- final def !=(arg0: scala.Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: scala.Any): Boolean
- Definition Classes
- AnyRef → Any
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @IntrinsicCandidate() @native()
- final def compose[_O, _E >: E](that: Evolution[O, _O, _E]): Evolution[I, _O, _E]
Composes this evolution with another, creating a new evolution whose continuation for any status is the sequential composition of the corresponding continuations of both evolutions.
Composes this evolution with another, creating a new evolution whose continuation for any status is the sequential composition of the corresponding continuations of both evolutions.
Specifically:
composed(s) == self(s) ~> that(s)
Used internally when merging evolutions during Yield composition inside Stage.AndThen.
- _O
the output type of the resulting stages
- _E
the combined error type
- that
the downstream evolution to compose with
- returns
a new evolution representing
selffollowed bythat
- Definition Classes
- Evolution
- Annotations
- @inline()
- def dispose(): Unit
Releases resources held by both composed evolutions, disposing
upstreamfirst, thendownstream.Releases resources held by both composed evolutions, disposing
upstreamfirst, thendownstream.If
upstream.dispose()throws a non-fatal exception,downstream.dispose()is still attempted. Any non-fatal exception fromdownstream.dispose()is added as suppressed to the primary before it is re-thrown. - val downstream: Evolution[I, OI, E]
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def evolve(status: Status[_]): Stage[I, O, E]
Returns the next Stage based on the given
status.Returns the next Stage based on the given
status.May release resources that are specific to this evolution instance and will not be reused by subsequent generations (i.e. resources not needed by the returned stage or its own evolution).
- status
the status that determines the continuation stage
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @IntrinsicCandidate() @native()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- final def map[_I, _O, _E](f: (Stage[I, O, E]) => Stage[_I, _O, _E]): Evolution[_I, _O, _E]
Transforms every continuation of this evolution by applying
fto the stage it returns.Transforms every continuation of this evolution by applying
fto the stage it returns.This is the public API for adapting an
Evolutionto a different stage type without exposing internal composition details.- _I
the input type of the resulting stages
- _O
the output type of the resulting stages
- _E
the error type of the resulting stages
- f
a function that transforms each continuation stage
- returns
a new evolution with all continuations mapped by
f
- Definition Classes
- Evolution
- Annotations
- @inline()
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @IntrinsicCandidate() @native()
- def productElementNames: Iterator[String]
- Definition Classes
- Product
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- val upstream: Evolution[OI, O, E]
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated
(Since version 9)