add is_err() to TryFuture extension

add fold_default to Future tools extension

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk 2024-12-06 12:42:14 +00:00
parent de3b137df8
commit 23cf2b2236
2 changed files with 31 additions and 6 deletions

View file

@ -1,5 +1,8 @@
//! Extended external extensions to futures::TryFutureExt
#![allow(clippy::type_complexity)]
// is_ok() has to consume *self rather than borrow. This extension is for a
// caller only ever caring about result status while discarding all contents.
#![allow(clippy::wrong_self_convention)]
use futures::{
future::{MapOkOrElse, UnwrapOrElse},
@ -11,12 +14,10 @@ pub trait TryExtExt<T, E>
where
Self: TryFuture<Ok = T, Error = E> + Send,
{
/// Resolves to a bool for whether the TryFuture (Future of a Result)
/// resolved to Ok or Err.
///
/// is_ok() has to consume *self rather than borrow. The intent of this
/// extension is therefor for a caller only ever caring about result status
/// while discarding all contents.
fn is_err(self) -> MapOkOrElse<Self, impl FnOnce(Self::Ok) -> bool, impl FnOnce(Self::Error) -> bool>
where
Self: Sized;
#[allow(clippy::wrong_self_convention)]
fn is_ok(self) -> MapOkOrElse<Self, impl FnOnce(Self::Ok) -> bool, impl FnOnce(Self::Error) -> bool>
where
@ -44,6 +45,14 @@ impl<T, E, Fut> TryExtExt<T, E> for Fut
where
Fut: TryFuture<Ok = T, Error = E> + Send,
{
#[inline]
fn is_err(self) -> MapOkOrElse<Self, impl FnOnce(Self::Ok) -> bool, impl FnOnce(Self::Error) -> bool>
where
Self: Sized,
{
self.map_ok_or(true, |_| false)
}
#[inline]
fn is_ok(self) -> MapOkOrElse<Self, impl FnOnce(Self::Ok) -> bool, impl FnOnce(Self::Error) -> bool>
where

View file

@ -32,6 +32,12 @@ where
fn counts_with_cap<const CAP: usize>(self) -> impl Future<Output = HashMap<Item, usize>> + Send
where
<Self as Stream>::Item: Eq + Hash;
fn fold_default<T, F, Fut>(self, f: F) -> impl Future<Output = T> + Send
where
F: Fn(T, Item) -> Fut + Send,
Fut: Future<Output = T> + Send,
T: Default + Send;
}
impl<Item, S> Tools<Item> for S
@ -77,4 +83,14 @@ where
counts
})
}
#[inline]
fn fold_default<T, F, Fut>(self, f: F) -> impl Future<Output = T> + Send
where
F: Fn(T, Item) -> Fut + Send,
Fut: Future<Output = T> + Send,
T: Default + Send,
{
self.fold(T::default(), f)
}
}