diff options
author | Zhouyu Qian <qzy@qzy.io> | 2018-04-19 18:02:30 -0700 |
---|---|---|
committer | Zhouyu Qian <qzy@qzy.io> | 2018-04-19 19:38:20 -0700 |
commit | 5e2b582662b1c0ab28460629a846e9fe693120c5 (patch) | |
tree | 334fb41dcf1b8190cf46c8fb0565deda9c4c0ec2 /src/poll.rs | |
parent | 305141c6dede2ebb5e7b4c5d4c1bc547f52f3d48 (diff) | |
download | nix-5e2b582662b1c0ab28460629a846e9fe693120c5.zip |
Implement Debug trait for PollFd
This is useful when using printf-style debugging to observe the variables of
the program.
Also includes a test.
Fixes #885.
Diffstat (limited to 'src/poll.rs')
-rw-r--r-- | src/poll.rs | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/poll.rs b/src/poll.rs index f3046ff3..eb6b2417 100644 --- a/src/poll.rs +++ b/src/poll.rs @@ -4,6 +4,7 @@ use sys::time::TimeSpec; #[cfg(any(target_os = "android", target_os = "dragonfly", target_os = "freebsd", target_os = "linux"))] use sys::signal::SigSet; use std::os::unix::io::RawFd; +use std::fmt; use libc; use Result; @@ -19,7 +20,6 @@ use errno::Errno; /// retrieved by calling [`revents()`](#method.revents) on the `PollFd`. #[repr(C)] #[derive(Clone, Copy)] -#[allow(missing_debug_implementations)] pub struct PollFd { pollfd: libc::pollfd, } @@ -43,6 +43,23 @@ impl PollFd { } } +impl fmt::Debug for PollFd { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let pfd = self.pollfd; + let mut ds = f.debug_struct("PollFd"); + ds.field("fd", &pfd.fd); + match EventFlags::from_bits(pfd.events) { + None => ds.field("events", &pfd.events), + Some(ef) => ds.field("events", &ef), + }; + match EventFlags::from_bits(pfd.revents) { + None => ds.field("revents", &pfd.revents), + Some(ef) => ds.field("revents", &ef), + }; + ds.finish() + } +} + libc_bitflags! { /// These flags define the different events that can be monitored by `poll` and `ppoll` pub struct EventFlags: libc::c_short { |