continuwuity/src/core/utils/future/ext_ext.rs
Jason Volk 27328cbc01 additional futures extension utils
Signed-off-by: Jason Volk <jason@zemos.net>
2025-01-09 18:14:23 +00:00

34 lines
762 B
Rust

//! Extended external extensions to futures::FutureExt
use std::marker::Unpin;
use futures::{future, future::Select, Future};
/// This interface is not necessarily complete; feel free to add as-needed.
pub trait ExtExt<T>
where
Self: Future<Output = T> + Send,
{
fn until<A, B, F>(self, f: F) -> Select<A, B>
where
Self: Sized,
F: FnOnce() -> B,
A: Future<Output = T> + From<Self> + Send + Unpin,
B: Future<Output = ()> + Send + Unpin;
}
impl<T, Fut> ExtExt<T> for Fut
where
Fut: Future<Output = T> + Send,
{
#[inline]
fn until<A, B, F>(self, f: F) -> Select<A, B>
where
Self: Sized,
F: FnOnce() -> B,
A: Future<Output = T> + From<Self> + Send + Unpin,
B: Future<Output = ()> + Send + Unpin,
{
future::select(self.into(), f())
}
}