Skip to content

Commit

Permalink
chore: Revert "use #[non_exhaustive] instead of private unit field" (#…
Browse files Browse the repository at this point in the history
…3323)

This reverts commit 575938d.
  • Loading branch information
taiki-e authored Dec 23, 2020
1 parent 575938d commit ce0e9c6
Show file tree
Hide file tree
Showing 15 changed files with 55 additions and 43 deletions.
5 changes: 2 additions & 3 deletions examples/tinyhttp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,13 +224,12 @@ mod date {

use time::{self, Duration};

#[non_exhaustive]
pub struct Now;
pub struct Now(());

/// Returns a struct, which when formatted, renders an appropriate `Date`
/// header value.
pub fn now() -> Now {
Now
Now(())
}

// Gee Alex, doesn't this seem like premature optimization. Well you see
Expand Down
11 changes: 8 additions & 3 deletions tokio-stream/src/timeout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ pin_project! {

/// Error returned by `Timeout`.
#[derive(Debug, PartialEq)]
#[non_exhaustive]
pub struct Elapsed;
pub struct Elapsed(());

impl<S: Stream> Timeout<S> {
pub(super) fn new(stream: S, duration: Duration) -> Self {
Expand Down Expand Up @@ -62,7 +61,7 @@ impl<S: Stream> Stream for Timeout<S> {
if *me.poll_deadline {
ready!(me.deadline.poll(cx));
*me.poll_deadline = false;
return Poll::Ready(Some(Err(Elapsed)));
return Poll::Ready(Some(Err(Elapsed::new())));
}

Poll::Pending
Expand All @@ -75,6 +74,12 @@ impl<S: Stream> Stream for Timeout<S> {

// ===== impl Elapsed =====

impl Elapsed {
pub(crate) fn new() -> Self {
Elapsed(())
}
}

impl fmt::Display for Elapsed {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
"deadline has elapsed".fmt(fmt)
Expand Down
5 changes: 2 additions & 3 deletions tokio-util/src/codec/bytes_codec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,13 +42,12 @@ use std::io;
/// ```
///
#[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Default)]
#[non_exhaustive]
pub struct BytesCodec;
pub struct BytesCodec(());

impl BytesCodec {
/// Creates a new `BytesCodec` for shipping around raw bytes.
pub fn new() -> BytesCodec {
BytesCodec
BytesCodec(())
}
}

Expand Down
8 changes: 7 additions & 1 deletion tokio-util/src/codec/framed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ impl<T, U> Framed<T, U> {
codec: self.inner.codec,
read_buf: self.inner.state.read.buffer,
write_buf: self.inner.state.write.buffer,
_priv: (),
}
}
}
Expand Down Expand Up @@ -281,7 +282,7 @@ where
///
/// [`Framed`]: crate::codec::Framed
#[derive(Debug)]
#[non_exhaustive]
#[allow(clippy::manual_non_exhaustive)]
pub struct FramedParts<T, U> {
/// The inner transport used to read bytes to and write bytes to
pub io: T,
Expand All @@ -294,6 +295,10 @@ pub struct FramedParts<T, U> {

/// A buffer with unprocessed data which are not written yet.
pub write_buf: BytesMut,

/// This private field allows us to add additional fields in the future in a
/// backwards compatible way.
_priv: (),
}

impl<T, U> FramedParts<T, U> {
Expand All @@ -307,6 +312,7 @@ impl<T, U> FramedParts<T, U> {
codec,
read_buf: BytesMut::new(),
write_buf: BytesMut::new(),
_priv: (),
}
}
}
9 changes: 5 additions & 4 deletions tokio-util/src/codec/length_delimited.rs
Original file line number Diff line number Diff line change
Expand Up @@ -409,8 +409,9 @@ pub struct Builder {
}

/// An error when the number of bytes read is more than max frame length.
#[non_exhaustive]
pub struct LengthDelimitedCodecError;
pub struct LengthDelimitedCodecError {
_priv: (),
}

/// A codec for frames delimited by a frame head specifying their lengths.
///
Expand Down Expand Up @@ -495,7 +496,7 @@ impl LengthDelimitedCodec {
if n > self.builder.max_frame_len as u64 {
return Err(io::Error::new(
io::ErrorKind::InvalidData,
LengthDelimitedCodecError,
LengthDelimitedCodecError { _priv: () },
));
}

Expand Down Expand Up @@ -585,7 +586,7 @@ impl Encoder<Bytes> for LengthDelimitedCodec {
if n > self.builder.max_frame_len {
return Err(io::Error::new(
io::ErrorKind::InvalidInput,
LengthDelimitedCodecError,
LengthDelimitedCodecError { _priv: () },
));
}

Expand Down
7 changes: 3 additions & 4 deletions tokio/src/io/async_fd.rs
Original file line number Diff line number Diff line change
Expand Up @@ -530,7 +530,7 @@ impl<'a, Inner: AsRawFd> AsyncFdReadyGuard<'a, Inner> {
}

match result {
Err(err) if err.kind() == io::ErrorKind::WouldBlock => Err(TryIoError),
Err(err) if err.kind() == io::ErrorKind::WouldBlock => Err(TryIoError(())),
result => Ok(result),
}
}
Expand Down Expand Up @@ -591,7 +591,7 @@ impl<'a, Inner: AsRawFd> AsyncFdReadyMutGuard<'a, Inner> {
}

match result {
Err(err) if err.kind() == io::ErrorKind::WouldBlock => Err(TryIoError),
Err(err) if err.kind() == io::ErrorKind::WouldBlock => Err(TryIoError(())),
result => Ok(result),
}
}
Expand Down Expand Up @@ -620,5 +620,4 @@ impl<'a, T: std::fmt::Debug + AsRawFd> std::fmt::Debug for AsyncFdReadyMutGuard<
/// [`WouldBlock`]: std::io::ErrorKind::WouldBlock
/// [`try_io`]: method@AsyncFdReadyGuard::try_io
#[derive(Debug)]
#[non_exhaustive]
pub struct TryIoError;
pub struct TryIoError(());
7 changes: 4 additions & 3 deletions tokio/src/io/util/empty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ cfg_io_util! {
///
/// [`empty`]: fn@empty
/// [std]: std::io::empty
#[non_exhaustive]
pub struct Empty;
pub struct Empty {
_p: (),
}

/// Creates a new empty async reader.
///
Expand All @@ -41,7 +42,7 @@ cfg_io_util! {
/// }
/// ```
pub fn empty() -> Empty {
Empty
Empty { _p: () }
}
}

Expand Down
7 changes: 4 additions & 3 deletions tokio/src/io/util/sink.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,9 @@ cfg_io_util! {
///
/// [sink]: sink()
/// [std]: std::io::Sink
#[non_exhaustive]
pub struct Sink;
pub struct Sink {
_p: (),
}

/// Creates an instance of an async writer which will successfully consume all
/// data.
Expand Down Expand Up @@ -44,7 +45,7 @@ cfg_io_util! {
/// }
/// ```
pub fn sink() -> Sink {
Sink
Sink { _p: () }
}
}

Expand Down
5 changes: 2 additions & 3 deletions tokio/src/runtime/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ impl Handle {
///
/// Contrary to `current`, this never panics
pub fn try_current() -> Result<Self, TryCurrentError> {
context::current().ok_or(TryCurrentError)
context::current().ok_or(TryCurrentError(()))
}

/// Spawn a future onto the Tokio runtime.
Expand Down Expand Up @@ -203,8 +203,7 @@ impl Handle {
}

/// Error returned by `try_current` when no Runtime has been started
#[non_exhaustive]
pub struct TryCurrentError;
pub struct TryCurrentError(());

impl fmt::Debug for TryCurrentError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand Down
6 changes: 2 additions & 4 deletions tokio/src/sync/batch_semaphore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,6 @@ pub enum TryAcquireError {
/// The semaphore has no available permits.
NoPermits,
}

/// Error returned from the [`Semaphore::acquire`] function.
///
/// An `acquire` operation can only fail if the semaphore has been
Expand All @@ -63,8 +62,7 @@ pub enum TryAcquireError {
/// [closed]: crate::sync::Semaphore::close
/// [`Semaphore::acquire`]: crate::sync::Semaphore::acquire
#[derive(Debug)]
#[non_exhaustive]
pub struct AcquireError;
pub struct AcquireError(());

pub(crate) struct Acquire<'a> {
node: Waiter,
Expand Down Expand Up @@ -523,7 +521,7 @@ unsafe impl Sync for Acquire<'_> {}

impl AcquireError {
fn closed() -> AcquireError {
AcquireError
AcquireError(())
}
}

Expand Down
3 changes: 1 addition & 2 deletions tokio/src/sync/mpsc/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,7 @@ impl<T> From<SendError<T>> for TrySendError<T> {

/// Error returned by `Receiver`.
#[derive(Debug)]
#[non_exhaustive]
pub struct RecvError;
pub struct RecvError(());

impl fmt::Display for RecvError {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand Down
7 changes: 3 additions & 4 deletions tokio/src/sync/mutex.rs
Original file line number Diff line number Diff line change
Expand Up @@ -167,8 +167,7 @@ unsafe impl<T> Sync for OwnedMutexGuard<T> where T: ?Sized + Send + Sync {}
///
/// [`Mutex::try_lock`]: Mutex::try_lock
#[derive(Debug)]
#[non_exhaustive]
pub struct TryLockError;
pub struct TryLockError(());

impl fmt::Display for TryLockError {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand Down Expand Up @@ -324,7 +323,7 @@ impl<T: ?Sized> Mutex<T> {
pub fn try_lock(&self) -> Result<MutexGuard<'_, T>, TryLockError> {
match self.s.try_acquire(1) {
Ok(_) => Ok(MutexGuard { lock: self }),
Err(_) => Err(TryLockError),
Err(_) => Err(TryLockError(())),
}
}

Expand Down Expand Up @@ -379,7 +378,7 @@ impl<T: ?Sized> Mutex<T> {
pub fn try_lock_owned(self: Arc<Self>) -> Result<OwnedMutexGuard<T>, TryLockError> {
match self.s.try_acquire(1) {
Ok(_) => Ok(OwnedMutexGuard { lock: self }),
Err(_) => Err(TryLockError),
Err(_) => Err(TryLockError(())),
}
}

Expand Down
7 changes: 4 additions & 3 deletions tokio/src/task/task_local.rs
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ impl<T: 'static> LocalKey<T> {
if let Some(val) = v.borrow().as_ref() {
Ok(f(val))
} else {
Err(AccessError)
Err(AccessError { _private: () })
}
})
}
Expand Down Expand Up @@ -223,8 +223,9 @@ impl<T: 'static> StaticLifetime for T {}

/// An error returned by [`LocalKey::try_with`](method@LocalKey::try_with).
#[derive(Clone, Copy, Eq, PartialEq)]
#[non_exhaustive]
pub struct AccessError;
pub struct AccessError {
_private: (),
}

impl fmt::Debug for AccessError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand Down
9 changes: 7 additions & 2 deletions tokio/src/time/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ impl From<Kind> for Error {

/// Error returned by `Timeout`.
#[derive(Debug, PartialEq)]
#[non_exhaustive]
pub struct Elapsed;
pub struct Elapsed(());

#[derive(Debug)]
pub(crate) enum InsertError {
Expand Down Expand Up @@ -100,6 +99,12 @@ impl fmt::Display for Error {

// ===== impl Elapsed =====

impl Elapsed {
pub(crate) fn new() -> Self {
Elapsed(())
}
}

impl fmt::Display for Elapsed {
fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
"deadline has elapsed".fmt(fmt)
Expand Down
2 changes: 1 addition & 1 deletion tokio/src/time/timeout.rs
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ where

// Now check the timer
match me.delay.poll(cx) {
Poll::Ready(()) => Poll::Ready(Err(Elapsed)),
Poll::Ready(()) => Poll::Ready(Err(Elapsed::new())),
Poll::Pending => Poll::Pending,
}
}
Expand Down

0 comments on commit ce0e9c6

Please sign in to comment.