add try_filter_map to TryReadyExt
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
use futures::{
|
use futures::{
|
||||||
future::{ready, Ready},
|
future::{ready, Ready},
|
||||||
stream::{AndThen, TryFold, TryForEach, TryStream, TryStreamExt},
|
stream::{AndThen, TryFilterMap, TryFold, TryForEach, TryStream, TryStreamExt},
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::Result;
|
use crate::Result;
|
||||||
@@ -20,11 +20,11 @@ where
|
|||||||
where
|
where
|
||||||
F: Fn(S::Ok) -> Result<U, E>;
|
F: Fn(S::Ok) -> Result<U, E>;
|
||||||
|
|
||||||
fn ready_try_for_each<F>(
|
fn ready_try_filter_map<F, U>(
|
||||||
self, f: F,
|
self, f: F,
|
||||||
) -> TryForEach<Self, Ready<Result<(), E>>, impl FnMut(S::Ok) -> Ready<Result<(), E>>>
|
) -> TryFilterMap<Self, Ready<Result<Option<U>, E>>, impl FnMut(S::Ok) -> Ready<Result<Option<U>, E>>>
|
||||||
where
|
where
|
||||||
F: FnMut(S::Ok) -> Result<(), E>;
|
F: Fn(S::Ok) -> Result<Option<U>, E>;
|
||||||
|
|
||||||
fn ready_try_fold<U, F>(
|
fn ready_try_fold<U, F>(
|
||||||
self, init: U, f: F,
|
self, init: U, f: F,
|
||||||
@@ -38,6 +38,12 @@ where
|
|||||||
where
|
where
|
||||||
F: Fn(U, S::Ok) -> Result<U, E>,
|
F: Fn(U, S::Ok) -> Result<U, E>,
|
||||||
U: Default;
|
U: Default;
|
||||||
|
|
||||||
|
fn ready_try_for_each<F>(
|
||||||
|
self, f: F,
|
||||||
|
) -> TryForEach<Self, Ready<Result<(), E>>, impl FnMut(S::Ok) -> Ready<Result<(), E>>>
|
||||||
|
where
|
||||||
|
F: FnMut(S::Ok) -> Result<(), E>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, E, S> TryReadyExt<T, E, S> for S
|
impl<T, E, S> TryReadyExt<T, E, S> for S
|
||||||
@@ -53,14 +59,13 @@ where
|
|||||||
self.and_then(move |t| ready(f(t)))
|
self.and_then(move |t| ready(f(t)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
fn ready_try_filter_map<F, U>(
|
||||||
fn ready_try_for_each<F>(
|
self, f: F,
|
||||||
self, mut f: F,
|
) -> TryFilterMap<Self, Ready<Result<Option<U>, E>>, impl FnMut(S::Ok) -> Ready<Result<Option<U>, E>>>
|
||||||
) -> TryForEach<Self, Ready<Result<(), E>>, impl FnMut(S::Ok) -> Ready<Result<(), E>>>
|
|
||||||
where
|
where
|
||||||
F: FnMut(S::Ok) -> Result<(), E>,
|
F: Fn(S::Ok) -> Result<Option<U>, E>,
|
||||||
{
|
{
|
||||||
self.try_for_each(move |t| ready(f(t)))
|
self.try_filter_map(move |t| ready(f(t)))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
@@ -83,4 +88,14 @@ where
|
|||||||
{
|
{
|
||||||
self.ready_try_fold(U::default(), f)
|
self.ready_try_fold(U::default(), f)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn ready_try_for_each<F>(
|
||||||
|
self, mut f: F,
|
||||||
|
) -> TryForEach<Self, Ready<Result<(), E>>, impl FnMut(S::Ok) -> Ready<Result<(), E>>>
|
||||||
|
where
|
||||||
|
F: FnMut(S::Ok) -> Result<(), E>,
|
||||||
|
{
|
||||||
|
self.try_for_each(move |t| ready(f(t)))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user