Skip to content

Commit

Permalink
Stabilize future readiness fns
Browse files Browse the repository at this point in the history
  • Loading branch information
yoshuawuyts committed Aug 25, 2020
1 parent ef1d58e commit 688f447
Show file tree
Hide file tree
Showing 6 changed files with 24 additions and 18 deletions.
4 changes: 2 additions & 2 deletions library/core/src/future/mod.rs
Expand Up @@ -21,9 +21,9 @@ pub use self::future::Future;
#[unstable(feature = "into_future", issue = "67644")]
pub use into_future::IntoFuture;

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
pub use pending::{pending, Pending};
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
pub use ready::{ready, Ready};

#[unstable(feature = "future_poll_fn", issue = "72302")]
Expand Down
20 changes: 13 additions & 7 deletions library/core/src/future/pending.rs
@@ -1,3 +1,4 @@
use crate::fmt::{self, Debug};
use crate::future::Future;
use crate::marker;
use crate::pin::Pin;
Expand All @@ -10,8 +11,7 @@ use crate::task::{Context, Poll};
/// documentation for more.
///
/// [`pending`]: fn.pending.html
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[derive(Debug)]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
#[must_use = "futures do nothing unless you `.await` or poll them"]
pub struct Pending<T> {
_data: marker::PhantomData<T>,
Expand All @@ -23,7 +23,6 @@ pub struct Pending<T> {
/// # Examples
///
/// ```no_run
/// #![feature(future_readiness_fns)]
/// use core::future;
///
/// # async fn run() {
Expand All @@ -32,12 +31,12 @@ pub struct Pending<T> {
/// unreachable!();
/// # }
/// ```
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
pub fn pending<T>() -> Pending<T> {
Pending { _data: marker::PhantomData }
}

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Future for Pending<T> {
type Output = T;

Expand All @@ -46,10 +45,17 @@ impl<T> Future for Pending<T> {
}
}

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Unpin for Pending<T> {}

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Debug for Pending<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_struct("Pending").finish()
}
}

#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Clone for Pending<T> {
fn clone(&self) -> Self {
pending()
Expand Down
13 changes: 8 additions & 5 deletions library/core/src/future/ready.rs
Expand Up @@ -8,15 +8,15 @@ use crate::task::{Context, Poll};
/// documentation for more.
///
/// [`ready`]: fn.ready.html
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
#[derive(Debug, Clone)]
#[must_use = "futures do nothing unless you `.await` or poll them"]
pub struct Ready<T>(Option<T>);

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Unpin for Ready<T> {}

#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
impl<T> Future for Ready<T> {
type Output = T;

Expand All @@ -28,18 +28,21 @@ impl<T> Future for Ready<T> {

/// Creates a future that is immediately ready with a value.
///
/// Futures created through this function are functionally similar to those
/// created through `async {}`. The main difference is that futures created
/// through this function are named and implement `Unpin`.
///
/// # Examples
///
/// ```
/// #![feature(future_readiness_fns)]
/// use core::future;
///
/// # async fn run() {
/// let a = future::ready(1);
/// assert_eq!(a.await, 1);
/// # }
/// ```
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
pub fn ready<T>(t: T) -> Ready<T> {
Ready(Some(t))
}
2 changes: 0 additions & 2 deletions library/core/src/task/ready.rs
Expand Up @@ -5,7 +5,6 @@
/// # Examples
///
/// ```
/// #![feature(future_readiness_fns)]
/// #![feature(ready_macro)]
///
/// use core::task::{ready, Context, Poll};
Expand All @@ -27,7 +26,6 @@
/// The `ready!` call expands to:
///
/// ```
/// # #![feature(future_readiness_fns)]
/// # #![feature(ready_macro)]
/// #
/// # use core::task::{Context, Poll};
Expand Down
2 changes: 1 addition & 1 deletion library/std/src/future.rs
Expand Up @@ -9,7 +9,7 @@ pub use core::future::Future;
pub use core::future::{from_generator, get_context, ResumeTy};

#[doc(inline)]
#[unstable(feature = "future_readiness_fns", issue = "70921")]
#[stable(feature = "future_readiness_fns", since = "1.47.0")]
pub use core::future::{pending, ready, Pending, Ready};

#[doc(inline)]
Expand Down
1 change: 0 additions & 1 deletion library/std/src/lib.rs
Expand Up @@ -268,7 +268,6 @@
#![feature(external_doc)]
#![feature(fn_traits)]
#![feature(format_args_nl)]
#![feature(future_readiness_fns)]
#![feature(gen_future)]
#![feature(generator_trait)]
#![feature(global_asm)]
Expand Down

0 comments on commit 688f447

Please sign in to comment.