//! TryStreamTools for futures::TryStream #![allow(clippy::type_complexity)] use futures::{future, future::Ready, stream::TryTakeWhile, TryStream, TryStreamExt}; use crate::Result; /// TryStreamTools pub trait TryTools where S: TryStream> + Send + ?Sized, Self: TryStream + Send + Sized, { fn try_take( self, n: usize, ) -> TryTakeWhile< Self, Ready>, impl FnMut(&S::Ok) -> Ready>, >; } impl TryTools for S where S: TryStream> + Send + ?Sized, Self: TryStream + Send + Sized, { #[inline] fn try_take( self, mut n: usize, ) -> TryTakeWhile< Self, Ready>, impl FnMut(&S::Ok) -> Ready>, > { self.try_take_while(move |_| { let res = future::ok(n > 0); n = n.saturating_sub(1); res }) } }