akka.stream.javadsl.CoupledTerminationFlow.scala Maven / Gradle / Ivy
/*
* Copyright (C) 2017-2020 Lightbend Inc.
*/
package akka.stream.javadsl
/**
* Allows coupling termination (cancellation, completion, erroring) of Sinks and Sources while creating a Flow from them.
* Similar to `Flow.fromSinkAndSource` however that API does not connect the completion signals of the wrapped operators.
*/
object CoupledTerminationFlow {
/**
* Similar to [[Flow.fromSinkAndSource]] however couples the termination of these two operators.
*
* E.g. if the emitted [[Flow]] gets a cancellation, the [[Source]] of course is cancelled,
* however the Sink will also be completed. The table below illustrates the effects in detail:
*
*
*
* Returned Flow
* Sink (in
)
* Source (out
)
*
*
* cause: upstream (sink-side) receives completion
* effect: receives completion
* effect: receives cancel
*
*
* cause: upstream (sink-side) receives error
* effect: receives error
* effect: receives cancel
*
*
* cause: downstream (source-side) receives cancel
* effect: completes
* effect: receives cancel
*
*
* effect: cancels upstream, completes downstream
* effect: completes
* cause: signals complete
*
*
* effect: cancels upstream, errors downstream
* effect: receives error
* cause: signals error or throws
*
*
* effect: cancels upstream, completes downstream
* cause: cancels
* effect: receives cancel
*
*
*
* The order in which the `in` and `out` sides receive their respective completion signals is not defined, do not rely on its ordering.
*/
@deprecated("Use `Flow.fromSinkAndSourceCoupledMat(..., ..., Keep.both())` instead", "2.5.2")
def fromSinkAndSource[I, O, M1, M2](in: Sink[I, M1], out: Source[O, M2]): Flow[I, O, (M1, M2)] =
akka.stream.scaladsl.Flow.fromSinkAndSourceCoupledMat(in, out)(akka.stream.scaladsl.Keep.both).asJava
}