multipart_write/stream/
mod.rs

1//! `MultipartWrite`rs compatible with [`Stream`].
2use crate::{FusedMultipartWrite, MultipartWrite};
3
4use futures_core::stream::Stream;
5
6mod feed_multipart_write;
7pub use feed_multipart_write::FeedMultipartWrite;
8
9mod write_complete;
10pub use write_complete::WriteComplete;
11
12impl<St: Stream> MultipartStreamExt for St {}
13
14/// Extension trait for combining streams with [`MultipartWrite`]rs.
15pub trait MultipartStreamExt: Stream {
16    /// This adapter transforms the stream into a new stream whose item type is
17    /// the output of the multipart writer writing parts until the closure `F`
18    /// indicates the writer should be completed.
19    fn feed_multipart_write<Wr, F>(self, writer: Wr, f: F) -> FeedMultipartWrite<Self, Wr, F>
20    where
21        Wr: FusedMultipartWrite<Self::Item>,
22        F: FnMut(Wr::Ret) -> bool,
23        Self: Sized,
24    {
25        FeedMultipartWrite::new(self, writer, f)
26    }
27
28    /// Collects a stream by writing to a `MultipartWrite`, returning the
29    /// result of completing the write as a future.
30    fn write_complete<Wr>(self, writer: Wr) -> WriteComplete<Self, Wr>
31    where
32        Wr: MultipartWrite<Self::Item>,
33        Self: Sized,
34    {
35        WriteComplete::new(self, writer)
36    }
37}