pub trait AsyncResultTools<T, E> {
#[allow(clippy::wrong_self_convention)]
fn is_ok_and_async<F, Fut>(self, f: F) -> impl Future<Output = bool>
where
F: FnOnce(T) -> Fut,
Fut: Future<Output = bool>;
fn map_async<B, F, Fut>(self, f: F) -> impl Future<Output = Result<B, E>>
where
F: FnOnce(T) -> Fut,
Fut: Future<Output = B>;
}
impl<T, E> AsyncResultTools<T, E> for Result<T, E> {
async fn is_ok_and_async<F, Fut>(self, f: F) -> bool
where
F: FnOnce(T) -> Fut,
Fut: Future<Output = bool>,
{
if let Ok(x) = self { f(x).await } else { false }
}
async fn map_async<B, F, Fut>(self, f: F) -> Result<B, E>
where
F: FnOnce(T) -> Fut,
Fut: Future<Output = B>,
{
match self {
Ok(x) => Ok(f(x).await),
Err(e) => Err(e),
}
}
}