Skip to content

Commit 1796172

Browse files
committed
Implement Debug trait for PollFd
This is useful when using printf-style debugging to observe the variables and of the program.
1 parent 305141c commit 1796172

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/poll.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use sys::time::TimeSpec;
44
#[cfg(any(target_os = "android", target_os = "dragonfly", target_os = "freebsd", target_os = "linux"))]
55
use sys::signal::SigSet;
66
use std::os::unix::io::RawFd;
7+
use std::fmt;
78

89
use libc;
910
use Result;
@@ -19,7 +20,6 @@ use errno::Errno;
1920
/// retrieved by calling [`revents()`](#method.revents) on the `PollFd`.
2021
#[repr(C)]
2122
#[derive(Clone, Copy)]
22-
#[allow(missing_debug_implementations)]
2323
pub struct PollFd {
2424
pollfd: libc::pollfd,
2525
}
@@ -43,6 +43,23 @@ impl PollFd {
4343
}
4444
}
4545

46+
impl fmt::Debug for PollFd {
47+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
48+
let pfd = self.pollfd;
49+
let mut ds = f.debug_struct("PollFd");
50+
ds.field("fd", &pfd.fd);
51+
match EventFlags::from_bits(pfd.events) {
52+
None => ds.field("events", &pfd.events),
53+
Some(ef) => ds.field("events", &ef),
54+
};
55+
match EventFlags::from_bits(pfd.revents) {
56+
None => ds.field("revents", &pfd.revents),
57+
Some(ef) => ds.field("revents", &ef),
58+
};
59+
ds.finish()
60+
}
61+
}
62+
4663
libc_bitflags! {
4764
/// These flags define the different events that can be monitored by `poll` and `ppoll`
4865
pub struct EventFlags: libc::c_short {

0 commit comments

Comments
 (0)