From cd3befcefea40a8b9ecd67604ac84d458bfa77a1 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Mon, 10 May 2021 01:51:27 +0100 Subject: [PATCH] mgmtchannel: Break out read_rmp Signed-off-by: Ian Jackson --- src/packetframe.rs | 18 +++++++++++++++--- src/prelude.rs | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 28da9c3d..40a74134 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -268,10 +268,8 @@ impl FrameReader { pub fn read_withbulk<'c,T>(&'c mut self) -> (T, ReadFrame) where T: DeserializeOwned + Debug { - use MgmtChannelReadError::*; let mut f = self.new_frame()?.ok_or(MgmtChannelReadError::EOF)?; - let r = rmp_serde::decode::from_read(&mut f); - let v = r.map_err(|e| Parse(format!("{}", &e)))?; + let v = f.read_rmp()?; trace!("read OK {:?}", &v); (v, f) } @@ -284,6 +282,20 @@ impl FrameReader { } } +#[ext(pub, name=ReadExt)] +impl R { + #[throws(MgmtChannelReadError)] + fn read_rmp(&mut self) -> T + where T: DeserializeOwned, + R: Read + { + use MgmtChannelReadError as MCRE; + let r = rmp_serde::decode::from_read(self); + let v = r.map_err(|e| MCRE::Parse(format!("{}", &e)))?; + v + } +} + trait ReadOutput { fn copy_from_buf(&mut self, input: &[u8]) -> usize; } diff --git a/src/prelude.rs b/src/prelude.rs index 0881e9db..00989747 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -144,6 +144,7 @@ pub use crate::nwtemplates; pub use crate::occultilks::*; pub use crate::organise; pub use crate::packetframe::{FrameReader, FrameWriter, ReadFrame, WriteFrame}; +pub use crate::packetframe::{ReadExt}; pub use crate::pcaliases::*; pub use crate::pcrender::*; pub use crate::pieces::*; -- 2.30.2