Files
conduwuit/src/core/utils/future/ext_ext.rs
T
June Clementine Strawberry a1e1f40ded run cargo fix for rust 2024 changes and rustfmt
Signed-off-by: June Clementine Strawberry <strawberry@puppygock.gay>
2025-02-23 01:17:45 -05:00

35 lines
762 B
Rust

//! Extended external extensions to futures::FutureExt
use std::marker::Unpin;
use futures::{Future, future, future::Select};
/// 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())
}
}