From 683e77e2c0f08dd634bc7c3a5260ed6716ae9db5 Mon Sep 17 00:00:00 2001 From: Taiki Endo Date: Sun, 14 Feb 2021 03:45:54 +0900 Subject: [PATCH] Remove Never type alias --- futures-sink/src/lib.rs | 6 +++--- futures-util/src/future/future/mod.rs | 6 +++--- futures-util/src/lib.rs | 2 -- futures-util/src/never.rs | 18 ------------------ futures-util/src/sink/drain.rs | 8 ++++---- futures-util/src/sink/unfold.rs | 4 ++-- futures/src/lib.rs | 2 +- futures/tests/sink.rs | 8 ++++---- 8 files changed, 17 insertions(+), 37 deletions(-) delete mode 100644 futures-util/src/never.rs diff --git a/futures-sink/src/lib.rs b/futures-sink/src/lib.rs index 6193f51d6b..6139bbc4d8 100644 --- a/futures-sink/src/lib.rs +++ b/futures-sink/src/lib.rs @@ -158,10 +158,10 @@ where #[cfg(feature = "alloc")] mod if_alloc { use super::*; - use core::convert::Infallible as Never; + use core::convert::Infallible; impl Sink for alloc::vec::Vec { - type Error = Never; + type Error = Infallible; fn poll_ready(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) @@ -183,7 +183,7 @@ mod if_alloc { } impl Sink for alloc::collections::VecDeque { - type Error = Never; + type Error = Infallible; fn poll_ready(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Ready(Ok(())) diff --git a/futures-util/src/future/future/mod.rs b/futures-util/src/future/future/mod.rs index c11d108207..3aecfcc832 100644 --- a/futures-util/src/future/future/mod.rs +++ b/futures-util/src/future/future/mod.rs @@ -6,10 +6,10 @@ #[cfg(feature = "alloc")] use alloc::boxed::Box; use core::pin::Pin; +use core::convert::Infallible; use crate::fns::{inspect_fn, into_fn, ok_fn, InspectFn, IntoFn, OkFn}; use crate::future::{assert_future, Either}; -use crate::never::Never; use crate::stream::assert_stream; #[cfg(feature = "alloc")] use futures_core::future::{BoxFuture, LocalBoxFuture}; @@ -83,7 +83,7 @@ delegate_all!( delegate_all!( /// Future for the [`never_error`](super::FutureExt::never_error) combinator. NeverError( - Map> + Map> ): Debug + Future + FusedFuture + New[|x: Fut| Map::new(x, ok_fn())] ); @@ -551,7 +551,7 @@ pub trait FutureExt: Future { where Self: Sized, { - assert_future::, _>(NeverError::new(self)) + assert_future::, _>(NeverError::new(self)) } /// A convenience for calling `Future::poll` on `Unpin` future types. diff --git a/futures-util/src/lib.rs b/futures-util/src/lib.rs index 44823cc7da..370717d51c 100644 --- a/futures-util/src/lib.rs +++ b/futures-util/src/lib.rs @@ -324,8 +324,6 @@ pub use crate::sink::SinkExt; pub mod task; -pub mod never; - #[cfg(feature = "compat")] #[cfg_attr(docsrs, doc(cfg(feature = "compat")))] pub mod compat; diff --git a/futures-util/src/never.rs b/futures-util/src/never.rs deleted file mode 100644 index e811f97df7..0000000000 --- a/futures-util/src/never.rs +++ /dev/null @@ -1,18 +0,0 @@ -//! This module contains the `Never` type. -//! -//! Values of this type can never be created and will never exist. - -/// A type with no possible values. -/// -/// This is used to indicate values which can never be created, such as the -/// error type of infallible futures. -/// -/// This type is a stable equivalent to the `!` type from `std`. -/// -/// This is currently an alias for [`std::convert::Infallible`], but in -/// the future it may be an alias for [`!`][never]. -/// See ["Future compatibility" section of `std::convert::Infallible`][infallible] for more. -/// -/// [never]: https://doc.rust-lang.org/nightly/std/primitive.never.html -/// [infallible]: https://doc.rust-lang.org/nightly/std/convert/enum.Infallible.html#future-compatibility -pub type Never = core::convert::Infallible; diff --git a/futures-util/src/sink/drain.rs b/futures-util/src/sink/drain.rs index 33c5b3167c..f8f8f60675 100644 --- a/futures-util/src/sink/drain.rs +++ b/futures-util/src/sink/drain.rs @@ -1,5 +1,5 @@ use super::assert_sink; -use crate::never::Never; +use core::convert::Infallible; use core::marker::PhantomData; use core::pin::Pin; use futures_core::task::{Context, Poll}; @@ -24,16 +24,16 @@ pub struct Drain { /// /// let mut drain = sink::drain(); /// drain.send(5).await?; -/// # Ok::<(), futures::never::Never>(()) }).unwrap(); +/// # Ok::<(), std::convert::Infallible>(()) }).unwrap(); /// ``` pub fn drain() -> Drain { - assert_sink::(Drain { marker: PhantomData }) + assert_sink::(Drain { marker: PhantomData }) } impl Unpin for Drain {} impl Sink for Drain { - type Error = Never; + type Error = Infallible; fn poll_ready( self: Pin<&mut Self>, diff --git a/futures-util/src/sink/unfold.rs b/futures-util/src/sink/unfold.rs index 3903716837..dbf20749c1 100644 --- a/futures-util/src/sink/unfold.rs +++ b/futures-util/src/sink/unfold.rs @@ -29,12 +29,12 @@ pin_project! { /// async move { /// sum += i; /// eprintln!("{}", i); -/// Ok::<_, futures::never::Never>(sum) +/// Ok::<_, std::convert::Infallible>(sum) /// } /// }); /// futures::pin_mut!(unfold); /// unfold.send(5).await?; -/// # Ok::<(), futures::never::Never>(()) }).unwrap(); +/// # Ok::<(), std::convert::Infallible>(()) }).unwrap(); /// ``` pub fn unfold(init: T, function: F) -> Unfold where diff --git a/futures/src/lib.rs b/futures/src/lib.rs index de29ace218..840b9f8638 100644 --- a/futures/src/lib.rs +++ b/futures/src/lib.rs @@ -133,7 +133,7 @@ pub use futures_util::{join, pending, poll, select_biased, try_join}; // Async-a // Module reexports #[doc(inline)] -pub use futures_util::{future, never, sink, stream, task}; +pub use futures_util::{future, sink, stream, task}; #[cfg(feature = "alloc")] #[doc(inline)] diff --git a/futures/tests/sink.rs b/futures/tests/sink.rs index 597ed34c7a..b495f2e4b8 100644 --- a/futures/tests/sink.rs +++ b/futures/tests/sink.rs @@ -1,3 +1,5 @@ +use std::convert::Infallible; + mod sassert_next { use futures::stream::{Stream, StreamExt}; use futures::task::Poll; @@ -356,7 +358,6 @@ fn with_flush() { use futures::channel::oneshot; use futures::executor::block_on; use futures::future::{self, FutureExt, TryFutureExt}; - use futures::never::Never; use futures::sink::{Sink, SinkExt}; use std::mem; use std::pin::Pin; @@ -369,7 +370,7 @@ fn with_flush() { let mut sink = Vec::new().with(|elem| { mem::replace(&mut block, future::ok(()).boxed()) .map_ok(move |()| elem + 1) - .map_err(|_| -> Never { panic!() }) + .map_err(|_| -> Infallible { panic!() }) }); assert_eq!(Pin::new(&mut sink).start_send(0).ok(), Some(())); @@ -392,10 +393,9 @@ fn with_flush() { fn with_as_map() { use futures::executor::block_on; use futures::future; - use futures::never::Never; use futures::sink::SinkExt; - let mut sink = Vec::new().with(|item| future::ok::(item * 2)); + let mut sink = Vec::new().with(|item| future::ok::(item * 2)); block_on(sink.send(0)).unwrap(); block_on(sink.send(1)).unwrap(); block_on(sink.send(2)).unwrap();