From: Ian Jackson Date: Sat, 1 May 2021 14:57:51 +0000 (+0100) Subject: mgmtchannel: Provide _withbulk X-Git-Tag: otter-0.6.0~492 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=b1f75fd233517b839d5b51080fd1b320380af22a;p=otter.git mgmtchannel: Provide _withbulk Signed-off-by: Ian Jackson --- diff --git a/src/mgmtchannel.rs b/src/mgmtchannel.rs index a2fc2aa9..2b763ca7 100644 --- a/src/mgmtchannel.rs +++ b/src/mgmtchannel.rs @@ -69,21 +69,41 @@ impl MgmtChannel { } #[throws(MgmtChannelReadError)] - pub fn read(&mut self) -> T { + pub fn read_withbulk<'c,T>(&'c mut self) -> (T, ReadFrame) + where T: DeserializeOwned + Debug + { use MgmtChannelReadError::*; - let f = self.read.new_frame()?.ok_or(MgmtChannelReadError::EOF)?; - let r = rmp_serde::decode::from_read(f); + let mut f = self.read.new_frame()?.ok_or(MgmtChannelReadError::EOF)?; + let r = rmp_serde::decode::from_read(&mut f); let v = r.map_err(|e| Parse(format!("{}", &e)))?; trace!("read OK {:?}", &v); - v + (v, f) + } + + #[throws(MgmtChannelReadError)] + pub fn read(&mut self) -> T + where T: DeserializeOwned + Debug + { + self.read_withbulk()?.0 } #[throws(MgmtChannelWriteError)] - pub fn write(&mut self, val: &T) { + pub fn write_withbulk<'c,T>(&mut self, val: &T) + -> WriteFrame + where T: Serialize + Debug + { let mut f = self.write.new_frame()?; rmp_serde::encode::write_named(&mut f, val)?; + trace!("writing {:?}", val); + f + } + + #[throws(MgmtChannelWriteError)] + pub fn write(&mut self, val: &T) + where T: Serialize + Debug + { + let f = self.write_withbulk(val)?; f.finish()?; - trace!("wrote OK {:?}", val); } #[throws(AE)] diff --git a/src/prelude.rs b/src/prelude.rs index 6bc26c54..2ddd8196 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -136,7 +136,7 @@ pub use crate::mgmtchannel::*; pub use crate::nwtemplates; pub use crate::occultilks::*; pub use crate::organise; -pub use crate::packetframe::{FrameReader, FrameWriter}; +pub use crate::packetframe::{FrameReader, FrameWriter, ReadFrame, WriteFrame}; pub use crate::pcaliases::*; pub use crate::pcrender::*; pub use crate::pieces::*;