Add unwrap_or_else_async to OptionFutureExt.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -2,6 +2,8 @@
|
|||||||
|
|
||||||
use futures::{Future, FutureExt, future::OptionFuture};
|
use futures::{Future, FutureExt, future::OptionFuture};
|
||||||
|
|
||||||
|
use super::super::BoolExt;
|
||||||
|
|
||||||
pub trait OptionFutureExt<T> {
|
pub trait OptionFutureExt<T> {
|
||||||
fn is_none_or(self, f: impl FnOnce(&T) -> bool + Send) -> impl Future<Output = bool> + Send;
|
fn is_none_or(self, f: impl FnOnce(&T) -> bool + Send) -> impl Future<Output = bool> + Send;
|
||||||
|
|
||||||
@@ -9,11 +11,16 @@ pub trait OptionFutureExt<T> {
|
|||||||
|
|
||||||
fn unwrap_or(self, t: T) -> impl Future<Output = T> + Send;
|
fn unwrap_or(self, t: T) -> impl Future<Output = T> + Send;
|
||||||
|
|
||||||
fn unwrap_or_else(self, f: impl FnOnce() -> T + Send) -> impl Future<Output = T> + Send;
|
|
||||||
|
|
||||||
fn unwrap_or_default(self) -> impl Future<Output = T> + Send
|
fn unwrap_or_default(self) -> impl Future<Output = T> + Send
|
||||||
where
|
where
|
||||||
T: Default;
|
T: Default;
|
||||||
|
|
||||||
|
fn unwrap_or_else(self, f: impl FnOnce() -> T + Send) -> impl Future<Output = T> + Send;
|
||||||
|
|
||||||
|
fn unwrap_or_else_async<F: Future<Output = T> + Send>(
|
||||||
|
self,
|
||||||
|
f: impl FnOnce() -> F + Send,
|
||||||
|
) -> impl Future<Output = Option<T>> + Send;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T, Fut> OptionFutureExt<T> for OptionFuture<Fut>
|
impl<T, Fut> OptionFutureExt<T> for OptionFuture<Fut>
|
||||||
@@ -34,11 +41,6 @@ where
|
|||||||
#[inline]
|
#[inline]
|
||||||
fn unwrap_or(self, t: T) -> impl Future<Output = T> + Send { self.map(|o| o.unwrap_or(t)) }
|
fn unwrap_or(self, t: T) -> impl Future<Output = T> + Send { self.map(|o| o.unwrap_or(t)) }
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn unwrap_or_else(self, f: impl FnOnce() -> T + Send) -> impl Future<Output = T> + Send {
|
|
||||||
self.map(|o| o.unwrap_or_else(f))
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn unwrap_or_default(self) -> impl Future<Output = T> + Send
|
fn unwrap_or_default(self) -> impl Future<Output = T> + Send
|
||||||
where
|
where
|
||||||
@@ -46,4 +48,17 @@ where
|
|||||||
{
|
{
|
||||||
self.map(Option::unwrap_or_default)
|
self.map(Option::unwrap_or_default)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn unwrap_or_else(self, f: impl FnOnce() -> T + Send) -> impl Future<Output = T> + Send {
|
||||||
|
self.map(|o| o.unwrap_or_else(f))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn unwrap_or_else_async<F: Future<Output = T> + Send>(
|
||||||
|
self,
|
||||||
|
f: impl FnOnce() -> F + Send,
|
||||||
|
) -> impl Future<Output = Option<T>> + Send {
|
||||||
|
self.map(|o| o.is_none().then_async(f)).flatten()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user