From: Ian Jackson Date: Mon, 31 May 2021 14:35:28 +0000 (+0100) Subject: timefd: Make Timed a trait X-Git-Tag: otter-0.7.0~191 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=ad25ee3a413d10d45990637f0b61e90b4d2bcdbe;p=otter.git timefd: Make Timed a trait Signed-off-by: Ian Jackson --- diff --git a/src/timedfd.rs b/src/timedfd.rs index 344aeb76..b592d722 100644 --- a/src/timedfd.rs +++ b/src/timedfd.rs @@ -4,6 +4,13 @@ use crate::prelude::*; +pub trait Timed { + fn set_deadline(&mut self, deadline: Option); + fn set_timeout(&mut self, timeout: Option); +} +pub trait TimedRead : Timed + Read { } +pub trait TimedWrite: Timed + Write { } + use io::ErrorKind as EK; use nix::fcntl::{fcntl, OFlag, FcntlArg}; @@ -86,16 +93,20 @@ impl TimedFd where RW: TimedFdReadWrite { let events = mio::event::Events::with_capacity(1); TimedFd { fd, poll, events, deadline: None, rw: PhantomData } } +} - pub fn set_deadline(&mut self, deadline: Option) { +impl Timed for TimedFd where RW: TimedFdReadWrite { + fn set_deadline(&mut self, deadline: Option) { self.deadline = deadline; } - pub fn set_timeout(&mut self, timeout: Option) { + fn set_timeout(&mut self, timeout: Option) { self.set_deadline(timeout.map(|timeout|{ Instant::now() + timeout })); } +} +impl TimedFd where RW: TimedFdReadWrite { #[throws(io::Error)] fn rw(&mut self, mut f: F) -> O where F: FnMut(i32) -> Result