use futures_util::stream::StreamExt; use futures_util::Stream; use items_0::streamitem::RangeCompletableItem; use items_0::streamitem::Sitemty; use items_0::streamitem::StreamItem; use items_0::transform::TransformProperties; use items_0::transform::WithTransformProperties; use items_0::Events; use std::pin::Pin; use std::task::Context; use std::task::Poll; pub struct IntoBoxedEventStream where T: Events, INP: Stream> + WithTransformProperties, { //inp: Pin>>>, inp: Pin>, } impl Stream for IntoBoxedEventStream where T: Events, INP: Stream> + WithTransformProperties, { type Item = Sitemty>; fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context) -> Poll> { use Poll::*; match self.inp.poll_next_unpin(cx) { Ready(Some(item)) => Ready(Some(match item { Ok(item) => Ok(match item { StreamItem::DataItem(item) => StreamItem::DataItem(match item { RangeCompletableItem::RangeComplete => RangeCompletableItem::RangeComplete, RangeCompletableItem::Data(item) => RangeCompletableItem::Data(Box::new(item)), }), StreamItem::Log(item) => StreamItem::Log(item), StreamItem::Stats(item) => StreamItem::Stats(item), }), Err(e) => Err(e), })), Ready(None) => Ready(None), Pending => Pending, } } } impl WithTransformProperties for IntoBoxedEventStream where T: Events, INP: Stream> + WithTransformProperties, { fn query_transform_properties(&self) -> TransformProperties { self.inp.query_transform_properties() } }