//! Synchronous combinator extensions to futures::TryStream use futures::{TryFuture, TryStream, TryStreamExt}; use super::automatic_width; use crate::Result; /// Concurrency extensions to augment futures::TryStreamExt. wide_ combinators /// produce in-order results pub trait TryWidebandExt where Self: TryStream> + Send + Sized, { fn widen_and_then( self, n: N, f: F, ) -> impl TryStream> + Send where N: Into>, F: Fn(Self::Ok) -> Fut + Send, Fut: TryFuture> + Send, U: Send; fn wide_and_then( self, f: F, ) -> impl TryStream> + Send where F: Fn(Self::Ok) -> Fut + Send, Fut: TryFuture> + Send, U: Send, { self.widen_and_then(None, f) } } impl TryWidebandExt for S where S: TryStream> + Send + Sized, E: Send, { fn widen_and_then( self, n: N, f: F, ) -> impl TryStream> + Send where N: Into>, F: Fn(Self::Ok) -> Fut + Send, Fut: TryFuture> + Send, U: Send, { self.map_ok(f) .try_buffered(n.into().unwrap_or_else(automatic_width)) } }