From b6e597968c62c69c054df687fec5b81350283e13 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 15 Apr 2021 01:56:03 +0100 Subject: [PATCH] packetframe: Introduce Fuse::get Signed-off-by: Ian Jackson --- src/packetframe.rs | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 5403c24e..95b5d18e 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -44,22 +44,25 @@ pub struct Broken { kind: io::ErrorKind, } +impl Fuse { + #[throws(io::Error)] + 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 { - match &mut self.0 { - Err(broken) => throw!(broken.clone()), - Ok(inner) => { - let r = inner.read(buf); - if let Err(e) = &r { - self.0 = Err(Broken { - msg: e.to_string(), - kind: e.kind(), - }); - } - r? - } + let inner = self.get()?; + let r = inner.read(buf); + if let Err(e) = &r { + self.0 = Err(Broken { + msg: e.to_string(), + kind: e.kind(), + }); } + r? } } -- 2.30.2