A Pipeline describes a full sequence of Stages, each executing in
sequence. The pipeline as a whole takes in a defined Start
(the Input of the first Stage) and returns a PipelineResult
of either End (the Output)of the final Stage),
Error if either of the Stages returns an error, or PipelineResult::Cancelled if
any of the stagee’s inspection callbacks cancels the pipeline execution (see Continue)
A Stage describes a single, potentially fallible, step of a pipeline.
It takes (via the run method), a specific Input
and returns either its defined Output or the pipeline’s
defined Error type
The pipeline method constructs the beginning of a pipeline, running a single Stage
with its associated inspection callback. See Extend::and_then for more information
about the inspection callback