Skip to content

Commit

Permalink
time: add FutureExt::timeout (#6276)
Browse files Browse the repository at this point in the history
  • Loading branch information
evanrittenhouse authored Jan 16, 2024
1 parent 12ce924 commit bfd7b08
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions tokio-util/src/time/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
//!
//! This type must be used from within the context of the `Runtime`.
use futures_core::Future;
use std::time::Duration;
use tokio::time::Timeout;

mod wheel;

Expand All @@ -17,6 +19,34 @@ pub mod delay_queue;
#[doc(inline)]
pub use delay_queue::DelayQueue;

/// A trait which contains a variety of convenient adapters and utilities for `Future`s.
pub trait FutureExt: Future {
/// A wrapper around [`tokio::time::timeout`], with the advantage that it is easier to write
/// fluent call chains.
///
/// # Examples
///
/// ```rust
/// use tokio::{sync::oneshot, time::Duration};
/// use tokio_util::time::FutureExt;
///
/// # async fn dox() {
/// let (tx, rx) = oneshot::channel::<()>();
///
/// let res = rx.timeout(Duration::from_millis(10)).await;
/// assert!(res.is_err());
/// # }
/// ```
fn timeout(self, timeout: Duration) -> Timeout<Self>
where
Self: Sized,
{
tokio::time::timeout(timeout, self)
}
}

impl<T: Future + ?Sized> FutureExt for T {}

// ===== Internal utils =====

enum Round {
Expand Down

0 comments on commit bfd7b08

Please sign in to comment.