diff options
Diffstat (limited to 'tokio/src/io/driver/interest.rs')
-rw-r--r-- | tokio/src/io/driver/interest.rs | 70 |
1 files changed, 62 insertions, 8 deletions
diff --git a/tokio/src/io/driver/interest.rs b/tokio/src/io/driver/interest.rs index f9887e86..8c8049df 100644 --- a/tokio/src/io/driver/interest.rs +++ b/tokio/src/io/driver/interest.rs @@ -1,3 +1,7 @@ +#![cfg_attr(not(feature = "net"), allow(unreachable_pub))] + +use crate::io::driver::Ready; + use std::fmt; use std::ops; @@ -5,34 +9,84 @@ use std::ops; /// /// Specifies the readiness events the caller is interested in when awaiting on /// I/O resource readiness states. -#[derive(Clone, Copy)] -pub(crate) struct Interest(mio::Interest); +#[cfg_attr(docsrs, doc(cfg(feature = "net")))] +#[derive(Clone, Copy, Eq, PartialEq)] +pub struct Interest(mio::Interest); impl Interest { - /// Interest in all readable events - pub(crate) const READABLE: Interest = Interest(mio::Interest::READABLE); + /// Interest in all readable events. + /// + /// Readable interest includes read-closed events. + pub const READABLE: Interest = Interest(mio::Interest::READABLE); /// Interest in all writable events - pub(crate) const WRITABLE: Interest = Interest(mio::Interest::WRITABLE); + /// + /// Writable interest includes write-closed events. + pub const WRITABLE: Interest = Interest(mio::Interest::WRITABLE); /// Returns true if the value includes readable interest. - pub(crate) const fn is_readable(self) -> bool { + /// + /// # Examples + /// + /// ``` + /// use tokio::io::Interest; + /// + /// assert!(Interest::READABLE.is_readable()); + /// assert!(!Interest::WRITABLE.is_readable()); + /// + /// let both = Interest::READABLE | Interest::WRITABLE; + /// assert!(both.is_readable()); + /// ``` + pub const fn is_readable(self) -> bool { self.0.is_readable() } /// Returns true if the value includes writable interest. - pub(crate) const fn is_writable(self) -> bool { + /// + /// # Examples + /// + /// ``` + /// use tokio::io::Interest; + /// + /// assert!(!Interest::READABLE.is_writable()); + /// assert!(Interest::WRITABLE.is_writable()); + /// + /// let both = Interest::READABLE | Interest::WRITABLE; + /// assert!(both.is_writable()); + /// ``` + pub const fn is_writable(self) -> bool { self.0.is_writable() } /// Add together two `Interst` values. - pub(crate) const fn add(self, other: Interest) -> Interest { + /// + /// This function works from a `const` context. + /// + /// # Examples + /// + /// ``` + /// use tokio::io::Interest; + /// + /// const BOTH: Interest = Interest::READABLE.add(Interest::WRITABLE); + /// + /// assert!(BOTH.is_readable()); + /// assert!(BOTH.is_writable()); + pub const fn add(self, other: Interest) -> Interest { Interest(self.0.add(other.0)) } + // This function must be crate-private to avoid exposing a `mio` dependency. pub(crate) const fn to_mio(self) -> mio::Interest { self.0 } + + pub(super) fn mask(self) -> Ready { + match self { + Interest::READABLE => Ready::READABLE | Ready::READ_CLOSED, + Interest::WRITABLE => Ready::WRITABLE | Ready::WRITE_CLOSED, + _ => Ready::EMPTY, + } + } } impl ops::BitOr for Interest { |