fn or_else<Fut, F>(self, f: F) -> OrElse<Self, Fut, F>
    where
        F: FnMut(Self::Error) -> Fut,
        Fut: TryFuture<Ok = Self::Ok>,
        Self: Sized,
    {
        assert_stream::<Result<Self::Ok, Fut::Error>, _>(OrElse::new(self, f))
    }
Chain on a computation for when an error happens, passing the
erroneous result to the provided closure `f`.

This function can be used to run a unit of work and attempt to recover from
an error if one happens. The closure provided will be yielded an error
when one appears, and the returned future will then be run to completion
to produce the next value on this stream.

Any successful values produced by this stream will not be passed to the
closure, and will be passed through.

The returned value of the closure must implement the [`TryFuture`](futures_core::future::TryFuture) trait
and can represent some more work to be done before the composed stream
is finished.

Note that this function consumes the receiving stream and returns a
wrapped version of it.
futures-util/src/stream/try_stream/mod.rs