From: Ian Jackson Date: Thu, 15 Apr 2021 00:56:03 +0000 (+0100) Subject: packetframe: Introduce Fuse::get X-Git-Tag: otter-0.6.0~585 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b6e597968c62c69c054df687fec5b81350283e13;p=otter.git packetframe: Introduce Fuse::get Signed-off-by: Ian Jackson --- 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? } }