From 8c0e319e949835fd373ead5b4dfc20e031a00f2a Mon Sep 17 00:00:00 2001 From: dignifiedquire Date: Sat, 27 Jun 2020 16:53:52 +0200 Subject: [PATCH] feat: new channels - add new top level `channels` module (stable) based on `async-channel` - deprecate `sync::channel` --- Cargo.toml | 3 +++ src/channel.rs | 6 ++++++ src/lib.rs | 6 +++--- src/sync/channel.rs | 6 ++++++ 4 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 src/channel.rs diff --git a/Cargo.toml b/Cargo.toml index eaa2d028..5aaa2b5f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -52,6 +52,7 @@ std = [ "wasm-bindgen-futures", "futures-channel", "async-mutex", + "async-channel", ] alloc = [ "futures-core/alloc", @@ -74,10 +75,12 @@ once_cell = { version = "1.3.1", optional = true } pin-project-lite = { version = "0.2.0", optional = true } pin-utils = { version = "0.1.0-alpha.4", optional = true } slab = { version = "0.4.2", optional = true } +async-channel = { version = "1.5.1", optional = true } # Devdepencency, but they are not allowed to be optional :/ surf = { version = "2.0.0", optional = true } + [target.'cfg(not(target_os = "unknown"))'.dependencies] async-global-executor = { version = "1.4.0", optional = true, features = ["async-io"] } async-io = { version = "1.0.1", optional = true } diff --git a/src/channel.rs b/src/channel.rs new file mode 100644 index 00000000..90adc140 --- /dev/null +++ b/src/channel.rs @@ -0,0 +1,6 @@ +//! Channels + +#[cfg(feature = "unstable")] +#[cfg_attr(feature = "docs", doc(cfg(unstable)))] +#[doc(inline)] +pub use async_channel::*; diff --git a/src/lib.rs b/src/lib.rs index 6f97bdca..e985f40d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -106,15 +106,14 @@ //! [`io`], [`fs`], and [`net`] modules. //! //! The [`task`] module contains `async-std`'s task abstractions. [`sync`] -//! contains further primitive shared memory types, including [`channel`], -//! which contains the channel types for message passing. +//! contains further primitive shared memory types. [`channel`] contains the channel types for message passing. //! //! [files]: fs/struct.File.html //! [TCP]: net/struct.TcpStream.html //! [UDP]: net/struct.UdpSocket.html //! [`io`]: fs/struct.File.html //! [`sync`]: sync/index.html -//! [`channel`]: sync/fn.channel.html +//! [`channel`]: channel/index.html //! //! ## Timeouts, intervals, and delays //! @@ -300,6 +299,7 @@ cfg_std! { pub mod os; pub mod prelude; pub mod sync; + pub mod channel; } cfg_default! { diff --git a/src/sync/channel.rs b/src/sync/channel.rs index 928cfc5d..528d8e0b 100644 --- a/src/sync/channel.rs +++ b/src/sync/channel.rs @@ -60,6 +60,7 @@ use crate::sync::WakerSet; /// ``` #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] +#[deprecated = "new channel api at async_std::channel"] pub fn channel(cap: usize) -> (Sender, Receiver) { let channel = Arc::new(Channel::with_capacity(cap)); let s = Sender { @@ -102,6 +103,7 @@ pub fn channel(cap: usize) -> (Sender, Receiver) { /// ``` #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] +#[deprecated = "new channel api at async_std::channel"] pub struct Sender { /// The inner channel. channel: Arc>, @@ -363,6 +365,7 @@ impl fmt::Debug for Sender { /// ``` #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] +#[deprecated = "new channel api at async_std::channel"] pub struct Receiver { /// The inner channel. channel: Arc>, @@ -993,6 +996,7 @@ impl Drop for Channel { #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] #[derive(PartialEq, Eq)] +#[deprecated = "new channel api at async_std::channel"] pub enum TrySendError { /// The channel is full but not disconnected. Full(T), @@ -1025,6 +1029,7 @@ impl Display for TrySendError { #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] #[derive(Debug, PartialEq, Eq)] +#[deprecated = "new channel api at async_std::channel"] pub enum TryRecvError { /// The channel is empty but not disconnected. Empty, @@ -1048,6 +1053,7 @@ impl Display for TryRecvError { #[cfg(feature = "unstable")] #[cfg_attr(feature = "docs", doc(cfg(unstable)))] #[derive(Debug, PartialEq, Eq)] +#[deprecated = "new channel api at async_std::channel"] pub struct RecvError; impl Error for RecvError {}