fn send_all<St>(&mut self, stream: St) -> SendAll<'_, Self, St>
    where
        St: Stream<Item = Result<Item, Self::Error>>,
        Self: Unpin,
    {
        assert_future::<Result<(), Self::Error>, _>(SendAll::new(self, stream))
    }
A future that completes after the given stream has been fully processed
into the sink, including flushing.

This future will drive the stream to keep producing items until it is
exhausted, sending each item to the sink. It will complete once both the
stream is exhausted, the sink has received all items, and the sink has
been flushed. Note that the sink is **not** closed. If the stream produces
an error, that error will be returned by this future without flushing the sink.

Doing `sink.send_all(stream)` is roughly equivalent to
`stream.forward(sink)`. The returned future will exhaust all items from
`stream` and send them to `self`.
futures-util/src/sink/mod.rs