Add unwrap suite to future::OptionExt extensions.

Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
Jason Volk
2025-11-01 21:35:32 +00:00
parent d680a6ba53
commit 240b498489

View File

@@ -6,6 +6,14 @@ pub trait OptionExt<T> {
fn is_none_or(self, f: impl FnOnce(&T) -> bool + Send) -> impl Future<Output = bool> + Send;
fn is_some_and(self, f: impl FnOnce(&T) -> bool + Send) -> impl Future<Output = bool> + 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
where
T: Default;
}
impl<T, Fut> OptionExt<T> for OptionFuture<Fut>
@@ -22,4 +30,20 @@ where
fn is_some_and(self, f: impl FnOnce(&T) -> bool + Send) -> impl Future<Output = bool> + Send {
self.map(|o| o.as_ref().is_some_and(f))
}
#[inline]
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]
fn unwrap_or_default(self) -> impl Future<Output = T> + Send
where
T: Default,
{
self.map(Option::unwrap_or_default)
}
}