You can use .try_collect() instead of that .try_fold(…) call. The () type actually supports being collected from a bunch of () items, both for normal iterators via impl FromIterator<()> for (), as well as for streams like this, too, via the implementation of impl Default for () and impl Extend<()> for ().
Besides missing the use futures::TryStreamExt; in this playground, being a TryStreamExt method, it needs the stream we’re starting with to be a stream of Results already… so something like
Lots of these methods, like buffer_unordered or try_for_each_concurrent, use FuturesUnordered internally. Since they all have extra code reasoning about potential length limits and such, if you don’t want any of this, the most conceptionally straightforward way might be to just to skip all these convenience layers and use the FuturesUnordered primitive yourself.
Not necessarily the shortest way in code, but it’s still fairly straightforward. A FuturesUnordered can be constructed from an iterator of futures, and then it itself is a stream, so the .try_collect of Result<(), _>s trick applies, giving something like
I’m not saying this is necessary or better than any previous approach, but I believe at least learning about the existence of FuturesUnordered (and FuturesOrdered, too, if you want to look at that) can be educational