From b3cf116c4f721af1c6894098888be85b1c7f46c8 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 15 Apr 2021 01:59:58 +0100 Subject: [PATCH] packetframe: Introduce Fuse::with Signed-off-by: Ian Jackson --- src/packetframe.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 95b5d18e..920916a8 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -49,13 +49,13 @@ impl Fuse { fn get(&mut self) -> &mut RW { self.0.as_mut().map_err(|broken| broken.clone())? } -} -impl Read for Fuse { #[throws(io::Error)] - fn read(&mut self, buf: &mut [u8]) -> usize { + fn with(&mut self, f: F) -> T + where F: FnOnce(&mut RW) -> Result + { let inner = self.get()?; - let r = inner.read(buf); + let r = f(inner); if let Err(e) = &r { self.0 = Err(Broken { msg: e.to_string(), @@ -66,6 +66,13 @@ impl Read for Fuse { } } +impl Read for Fuse { + #[throws(io::Error)] + fn read(&mut self, buf: &mut [u8]) -> usize { + self.with(|inner| inner.read(buf))? + } +} + impl From for io::Error { fn from(broken: Broken) -> io::Error { io::Error::new(broken.kind, broken) -- 2.30.2