use core::fmt; use core::marker::PhantomData; use core::pin::Pin; use futures_core::ready; use futures_core::stream::{FusedStream, Stream}; use futures_core::task::{Context, Poll}; use futures_sink::Sink; use pin_project_lite::pin_project;
pin_project! { /// Sink for the [`with_flat_map`](super::SinkExt::with_flat_map) method. #[must_use = "sinks do nothing unless polled"] pubstruct WithFlatMap<Si, Item, U, St, F> { #[pin]
sink: Si,
f: F, #[pin]
stream: Option<St>,
buffer: Option<Item>,
_marker: PhantomData<fn(U)>,
}
}
impl<Si, Item, U, St, F> fmt::Debug for WithFlatMap<Si, Item, U, St, F> where
Si: fmt::Debug,
St: fmt::Debug,
Item: fmt::Debug,
{ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("WithFlatMap")
.field("sink", &self.sink)
.field("stream", &self.stream)
.field("buffer", &self.buffer)
.finish()
}
}
// Forwarding impl of Stream from the underlying sink impl<S, Item, U, St, F> Stream for WithFlatMap<S, Item, U, St, F> where
S: Stream + Sink<Item>,
F: FnMut(U) -> St,
St: Stream<Item = Result<Item, S::Error>>,
{ type Item = S::Item;
delegate_stream!(sink);
}
impl<S, Item, U, St, F> FusedStream for WithFlatMap<S, Item, U, St, F> where
S: FusedStream + Sink<Item>,
F: FnMut(U) -> St,
St: Stream<Item = Result<Item, S::Error>>,
{ fn is_terminated(&self) -> bool { self.sink.is_terminated()
}
}
impl<Si, Item, U, St, F> Sink<U> for WithFlatMap<Si, Item, U, St, F> where
Si: Sink<Item>,
F: FnMut(U) -> St,
St: Stream<Item = Result<Item, Si::Error>>,
{ type Error = Si::Error;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.