send_all exhausts given stream, so it's probably ok to consume stream. This allows removing the stream's Unpin requirement. Also, since &mut impl Stream + Unpin implements Stream, code using the current version will also work.
It will complete once both the stream is exhausted, the sink has received all items, and the sink has been flushed.