diff --git a/src/fs/dir_entry.rs b/src/fs/dir_entry.rs index 4e07a3f22..47a7e40aa 100644 --- a/src/fs/dir_entry.rs +++ b/src/fs/dir_entry.rs @@ -5,9 +5,9 @@ use std::pin::Pin; use std::sync::Mutex; use cfg_if::cfg_if; -use futures::future::{self, FutureExt, TryFutureExt}; +use futures::future::{FutureExt, TryFutureExt}; -use crate::future::Future; +use crate::future::{self, Future}; use crate::io; use crate::task::{blocking, Poll}; diff --git a/src/fs/file.rs b/src/fs/file.rs index b297181d2..94fa5786e 100644 --- a/src/fs/file.rs +++ b/src/fs/file.rs @@ -7,10 +7,10 @@ use std::pin::Pin; use std::sync::Mutex; use cfg_if::cfg_if; -use futures::future::{self, FutureExt, TryFutureExt}; +use futures::future::{FutureExt, TryFutureExt}; use futures::io::{AsyncRead, AsyncSeek, AsyncWrite, Initializer}; -use crate::future::Future; +use crate::future::{self, Future}; use crate::io; use crate::task::{blocking, Context, Poll}; diff --git a/src/future/mod.rs b/src/future/mod.rs index 29e2b047f..09474faa7 100644 --- a/src/future/mod.rs +++ b/src/future/mod.rs @@ -4,7 +4,9 @@ pub use std::future::Future; pub use pending::pending; +pub use poll_fn::poll_fn; pub use ready::ready; mod pending; +mod poll_fn; mod ready; diff --git a/src/future/pending.rs b/src/future/pending.rs index 41284f54d..95b0392fa 100644 --- a/src/future/pending.rs +++ b/src/future/pending.rs @@ -1,16 +1,17 @@ /// Never resolves to a value. /// /// # Examples +/// /// ``` /// # fn main() { async_std::task::block_on(async { /// # /// use std::time::Duration; /// -/// use async_std::future::pending; +/// use async_std::future; /// use async_std::io; /// /// let dur = Duration::from_secs(1); -/// let fut = pending(); +/// let fut = future::pending(); /// /// let res: io::Result<()> = io::timeout(dur, fut).await; /// assert!(res.is_err()); diff --git a/src/future/poll_fn.rs b/src/future/poll_fn.rs new file mode 100644 index 000000000..44da831fb --- /dev/null +++ b/src/future/poll_fn.rs @@ -0,0 +1,28 @@ +use crate::task::{Context, Poll}; + +/// Creates a new future wrapping around a function returning [`Poll`]. +/// +/// Polling the returned future delegates to the wrapped function. +/// +/// # Examples +/// +/// ``` +/// # fn main() { async_std::task::block_on(async { +/// # +/// use async_std::future; +/// use async_std::task::{Context, Poll}; +/// +/// fn poll_greeting(_: &mut Context<'_>) -> Poll { +/// Poll::Ready("hello world".to_string()) +/// } +/// +/// assert_eq!(future::poll_fn(poll_greeting).await, "hello world"); +/// # +/// # }) } +/// ``` +pub async fn poll_fn(f: F) -> T +where + F: FnMut(&mut Context<'_>) -> Poll, +{ + futures::future::poll_fn(f).await +} diff --git a/src/io/stdin.rs b/src/io/stdin.rs index bd4c1118d..ee74cf7e3 100644 --- a/src/io/stdin.rs +++ b/src/io/stdin.rs @@ -3,10 +3,9 @@ use std::pin::Pin; use std::sync::Mutex; use cfg_if::cfg_if; -use futures::future; use futures::io::{AsyncRead, Initializer}; -use crate::future::Future; +use crate::future::{self, Future}; use crate::task::{blocking, Context, Poll}; /// Constructs a new handle to the standard input of the current process. diff --git a/src/net/tcp/listener.rs b/src/net/tcp/listener.rs index 60a96897a..3c5b382e8 100644 --- a/src/net/tcp/listener.rs +++ b/src/net/tcp/listener.rs @@ -2,10 +2,9 @@ use std::net::{self, SocketAddr, ToSocketAddrs}; use std::pin::Pin; use cfg_if::cfg_if; -use futures::future; use super::TcpStream; -use crate::future::Future; +use crate::future::{self, Future}; use crate::io; use crate::net::driver::IoHandle; use crate::task::{Context, Poll}; diff --git a/src/net/tcp/stream.rs b/src/net/tcp/stream.rs index d8233173d..19dde808a 100644 --- a/src/net/tcp/stream.rs +++ b/src/net/tcp/stream.rs @@ -4,9 +4,9 @@ use std::net::{self, SocketAddr, ToSocketAddrs}; use std::pin::Pin; use cfg_if::cfg_if; -use futures::future; use futures::io::{AsyncRead, AsyncWrite}; +use crate::future; use crate::io; use crate::net::driver::IoHandle; use crate::task::{Context, Poll}; diff --git a/src/net/udp/mod.rs b/src/net/udp/mod.rs index 3e9e749a8..8871a6f6d 100644 --- a/src/net/udp/mod.rs +++ b/src/net/udp/mod.rs @@ -2,8 +2,8 @@ use std::io; use std::net::{self, Ipv4Addr, Ipv6Addr, SocketAddr, ToSocketAddrs}; use cfg_if::cfg_if; -use futures::future; +use crate::future; use crate::net::driver::IoHandle; use crate::task::Poll; diff --git a/src/os/unix/net/datagram.rs b/src/os/unix/net/datagram.rs index 62debc4ce..af2f753b0 100644 --- a/src/os/unix/net/datagram.rs +++ b/src/os/unix/net/datagram.rs @@ -4,10 +4,10 @@ use std::fmt; use std::net::Shutdown; use std::path::Path; -use futures::future; use mio_uds; use super::SocketAddr; +use crate::future; use crate::io; use crate::net::driver::IoHandle; use crate::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; diff --git a/src/os/unix/net/listener.rs b/src/os/unix/net/listener.rs index 74b0a28d5..a6f40f95b 100644 --- a/src/os/unix/net/listener.rs +++ b/src/os/unix/net/listener.rs @@ -4,12 +4,11 @@ use std::fmt; use std::path::Path; use std::pin::Pin; -use futures::future; use mio_uds; use super::SocketAddr; use super::UnixStream; -use crate::future::Future; +use crate::future::{self, Future}; use crate::io; use crate::net::driver::IoHandle; use crate::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd}; diff --git a/src/os/unix/net/stream.rs b/src/os/unix/net/stream.rs index 74afdeebd..f4485da94 100644 --- a/src/os/unix/net/stream.rs +++ b/src/os/unix/net/stream.rs @@ -6,11 +6,11 @@ use std::net::Shutdown; use std::path::Path; use std::pin::Pin; -use futures::future; use futures::io::{AsyncRead, AsyncWrite}; use mio_uds; use super::SocketAddr; +use crate::future; use crate::io; use crate::net::driver::IoHandle; use crate::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd, RawFd};