pub fn read_withbulk<'c,T>(&'c mut self) -> (T, ReadFrame<impl Read + 'c>)
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)
}
}
}
+#[ext(pub, name=ReadExt)]
+impl<R: Read> R {
+ #[throws(MgmtChannelReadError)]
+ fn read_rmp<T>(&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;
}
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::*;