summaryrefslogtreecommitdiffstats
path: root/tokio/src/io/driver/ready.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tokio/src/io/driver/ready.rs')
-rw-r--r--tokio/src/io/driver/ready.rs120
1 files changed, 85 insertions, 35 deletions
diff --git a/tokio/src/io/driver/ready.rs b/tokio/src/io/driver/ready.rs
index 2790cc13..2ac01bdb 100644
--- a/tokio/src/io/driver/ready.rs
+++ b/tokio/src/io/driver/ready.rs
@@ -1,3 +1,5 @@
+#![cfg_attr(not(feature = "net"), allow(unreachable_pub))]
+
use std::fmt;
use std::ops;
@@ -6,36 +8,33 @@ const WRITABLE: usize = 0b0_10;
const READ_CLOSED: usize = 0b0_0100;
const WRITE_CLOSED: usize = 0b0_1000;
-/// A set of readiness event kinds.
-///
-/// `Ready` is set of operation descriptors indicating which kind of an
-/// operation is ready to be performed.
+/// Describes the readiness state of an I/O resources.
///
-/// This struct only represents portable event kinds. Portable events are
-/// events that can be raised on any platform while guaranteeing no false
-/// positives.
+/// `Ready` tracks which operation an I/O resource is ready to perform.
+#[cfg_attr(docsrs, doc(cfg(feature = "net")))]
#[derive(Clone, Copy, PartialEq, PartialOrd)]
-pub(crate) struct Ready(usize);
+pub struct Ready(usize);
impl Ready {
/// Returns the empty `Ready` set.
- pub(crate) const EMPTY: Ready = Ready(0);
+ pub const EMPTY: Ready = Ready(0);
/// Returns a `Ready` representing readable readiness.
- pub(crate) const READABLE: Ready = Ready(READABLE);
+ pub const READABLE: Ready = Ready(READABLE);
/// Returns a `Ready` representing writable readiness.
- pub(crate) const WRITABLE: Ready = Ready(WRITABLE);
+ pub const WRITABLE: Ready = Ready(WRITABLE);
/// Returns a `Ready` representing read closed readiness.
- pub(crate) const READ_CLOSED: Ready = Ready(READ_CLOSED);
+ pub const READ_CLOSED: Ready = Ready(READ_CLOSED);
/// Returns a `Ready` representing write closed readiness.
- pub(crate) const WRITE_CLOSED: Ready = Ready(WRITE_CLOSED);
+ pub const WRITE_CLOSED: Ready = Ready(WRITE_CLOSED);
/// Returns a `Ready` representing readiness for all operations.
- pub(crate) const ALL: Ready = Ready(READABLE | WRITABLE | READ_CLOSED | WRITE_CLOSED);
+ pub const ALL: Ready = Ready(READABLE | WRITABLE | READ_CLOSED | WRITE_CLOSED);
+ // Must remain crate-private to avoid adding a public dependency on Mio.
pub(crate) fn from_mio(event: &mio::event::Event) -> Ready {
let mut ready = Ready::EMPTY;
@@ -59,27 +58,78 @@ impl Ready {
}
/// Returns true if `Ready` is the empty set
- pub(crate) fn is_empty(self) -> bool {
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use tokio::io::Ready;
+ ///
+ /// assert!(Ready::EMPTY.is_empty());
+ /// assert!(!Ready::READABLE.is_empty());
+ /// ```
+ pub fn is_empty(self) -> bool {
self == Ready::EMPTY
}
- /// Returns true if the value includes readable readiness
- pub(crate) fn is_readable(self) -> bool {
+ /// Returns `true` if the value includes `readable`
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use tokio::io::Ready;
+ ///
+ /// assert!(!Ready::EMPTY.is_readable());
+ /// assert!(Ready::READABLE.is_readable());
+ /// assert!(Ready::READ_CLOSED.is_readable());
+ /// assert!(!Ready::WRITABLE.is_readable());
+ /// ```
+ pub fn is_readable(self) -> bool {
self.contains(Ready::READABLE) || self.is_read_closed()
}
- /// Returns true if the value includes writable readiness
- pub(crate) fn is_writable(self) -> bool {
+ /// Returns `true` if the value includes writable `readiness`
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use tokio::io::Ready;
+ ///
+ /// assert!(!Ready::EMPTY.is_writable());
+ /// assert!(!Ready::READABLE.is_writable());
+ /// assert!(Ready::WRITABLE.is_writable());
+ /// assert!(Ready::WRITE_CLOSED.is_writable());
+ /// ```
+ pub fn is_writable(self) -> bool {
self.contains(Ready::WRITABLE) || self.is_write_closed()
}
- /// Returns true if the value includes read closed readiness
- pub(crate) fn is_read_closed(self) -> bool {
+ /// Returns `true` if the value includes read-closed `readiness`
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use tokio::io::Ready;
+ ///
+ /// assert!(!Ready::EMPTY.is_read_closed());
+ /// assert!(!Ready::READABLE.is_read_closed());
+ /// assert!(Ready::READ_CLOSED.is_read_closed());
+ /// ```
+ pub fn is_read_closed(self) -> bool {
self.contains(Ready::READ_CLOSED)
}
- /// Returns true if the value includes write closed readiness
- pub(crate) fn is_write_closed(self) -> bool {
+ /// Returns `true` if the value includes write-closed `readiness`
+ ///
+ /// # Examples
+ ///
+ /// ```
+ /// use tokio::io::Ready;
+ ///
+ /// assert!(!Ready::EMPTY.is_write_closed());
+ /// assert!(!Ready::WRITABLE.is_write_closed());
+ /// assert!(Ready::WRITE_CLOSED.is_write_closed());
+ /// ```
+ pub fn is_write_closed(self) -> bool {
self.contains(Ready::WRITE_CLOSED)
}
@@ -143,37 +193,37 @@ cfg_io_readiness! {
}
}
-impl<T: Into<Ready>> ops::BitOr<T> for Ready {
+impl ops::BitOr<Ready> for Ready {
type Output = Ready;
#[inline]
- fn bitor(self, other: T) -> Ready {
- Ready(self.0 | other.into().0)
+ fn bitor(self, other: Ready) -> Ready {
+ Ready(self.0 | other.0)
}
}
-impl<T: Into<Ready>> ops::BitOrAssign<T> for Ready {
+impl ops::BitOrAssign<Ready> for Ready {
#[inline]
- fn bitor_assign(&mut self, other: T) {
- self.0 |= other.into().0;
+ fn bitor_assign(&mut self, other: Ready) {
+ self.0 |= other.0;
}
}
-impl<T: Into<Ready>> ops::BitAnd<T> for Ready {
+impl ops::BitAnd<Ready> for Ready {
type Output = Ready;
#[inline]
- fn bitand(self, other: T) -> Ready {
- Ready(self.0 & other.into().0)
+ fn bitand(self, other: Ready) -> Ready {
+ Ready(self.0 & other.0)
}
}
-impl<T: Into<Ready>> ops::Sub<T> for Ready {
+impl ops::Sub<Ready> for Ready {
type Output = Ready;
#[inline]
- fn sub(self, other: T) -> Ready {
- Ready(self.0 & !other.into().0)
+ fn sub(self, other: Ready) -> Ready {
+ Ready(self.0 & !other.0)
}
}