chiark / gitweb /
timedfd: Provide TimedFdWriter too
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 17 May 2021 13:47:17 +0000 (14:47 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 17 May 2021 13:57:18 +0000 (14:57 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/timedfd.rs

index c16aa13662f56371fff2409bce1558b04e4e3f68..91eed394839b65d4ae712def4bf399a26827106b 100644 (file)
@@ -25,11 +25,16 @@ pub trait TimedFdReadWrite {
 }
 
 pub type TimedFdReader = TimedFd<TimedFdRead>;
+pub type TimedFdWriter = TimedFd<TimedFdWrite>;
 
 #[derive(Debug,Copy,Clone)] pub struct TimedFdRead;
 impl TimedFdReadWrite for TimedFdRead {
   const INTEREST : mio::Interest = mio::Interest::READABLE;
 }
+#[derive(Debug,Copy,Clone)] pub struct TimedFdWrite;
+impl TimedFdReadWrite for TimedFdWrite {
+  const INTEREST : mio::Interest = mio::Interest::WRITABLE;
+}
 
 pub struct Fd(RawFd);
 impl Fd {
@@ -128,6 +133,16 @@ impl Read for TimedFd<TimedFdRead> {
   }
 }
 
+impl Write for TimedFd<TimedFdWrite> {
+  #[throws(io::Error)]
+  fn write(&mut self, buf: &[u8]) -> usize {
+    self.rw(|fd| unistd::write(fd, buf))?
+  }
+  #[throws(io::Error)]
+  fn flush(&mut self) {
+  }
+}
+
 impl Drop for Fd {
   fn drop(&mut self) {
     let fd = self.extract_raw_fd();