Pull the next item from the Source if available.
Pull the next item from the Source if available. The returned PullResult will indicate whether an item was successfully pulled.
Repeatedly pull items out of a pipe, even if items are not immediately available.
Repeatedly pull items out of a pipe, even if items are not immediately
available. The Source
will hold onto the given processing function and
immediately forward items into it as they become available. The returned
PullAction
determines how the Source
will proceed with the next item.
If PullContinue
or Wait
are returned, the Source
will hold onto the
processing function for either when the next item is available or when the
returned Signal
is fired. onComplete
is only called if the Source is
closed or terminated while the processing function is in use.
When Wait
is returned, the item that was passed into the processing
function is _not_ pulled from the source. Thus when the returned signal is
fired and processing resumes, the same item will be passed to the
processing function.
This method is generally intended for linking the output of a Source
to
the input of a Sink. For a simplified version of this functionality, see
Source.into
.
Immediately terminate the transport, permenantly putting it into an error state
Immediately terminate the transport, permenantly putting it into an error state
Link this source to a sink.
Link this source to a sink. Items will be pulled from the source and
pushed to the sink, respecting backpressure, until either the source is
closed or an error occurs. The linkClosed
and linkTerminated
parameters determine whether to propagate closure/termination of this
Source to the linked Sink. However if the sink is closed or terminated first, this
source will be terminated.
The sink to link to this source
if true, the linked sink will be closed when this source is closed
if true, the linked sink will be terminated when this source is terminated
Pull until either the supplied function returns false or there are no more
items immediately available to pull, in which case a Some[NullPullResult]
is returned indicating why the loop stopped.
Pull until either the supplied function returns false or there are no more
items immediately available to pull, in which case a Some[NullPullResult]
is returned indicating why the loop stopped.
A Pipe is an abstraction that mediates interactions between producers and consumers of a stream of data. It can be thought of as a mutable buffer that has built-in features for addressing both back-pressure (when the pipe "fills") and forward-pressure (when the pipe "empties"). Items are "pushed" into the pipe and "pulled" out of it.
A Pipe is the combination of the Source and Sink traits, representing the producer and consumer interfaces, respectively. It should be noted that a Pipe does not contain additional state beyond that provided by the Source and Sink interfaces. In other words, it may be possible for the producer
Sink
side of a pipe to be Closed or Terminated, while the consumerSource
side is in a different state.The canonical implementation is the BufferedPipe, backed by a fixed-length buffer. However pipes have many monadic and combinatorial capabilities, allowing them to be mapped, linked together, flattened, and multiplexed.
As opposed to other libraries/frameworks that have a concept of streams, sources, and sinks, these pipes are intended for low-level stream management. They support several features that allow interation with pipes to be very fast and efficient. They form the backbone of all connection handlers and as well as streaming protocols like http/2. Pipes are *not* thread-safe.