From: Ian Jackson Date: Fri, 16 Apr 2021 21:38:35 +0000 (+0100) Subject: packetframe: Provide write_rmp X-Git-Tag: otter-0.6.0~574 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9f90c646100a4afe42414dba51d60436c0f3b1c1;p=otter.git packetframe: Provide write_rmp Signed-off-by: Ian Jackson --- diff --git a/src/mgmtchannel.rs b/src/mgmtchannel.rs index edb578be..b91b3fbd 100644 --- a/src/mgmtchannel.rs +++ b/src/mgmtchannel.rs @@ -13,6 +13,8 @@ pub enum MgmtChannelReadError { } display_as_debug!{MgmtChannelReadError} +pub type MgmtChannelWriteError = rmp_serde::encode::Error; + pub struct MgmtChannel { read: io::Lines>>, write: BufWriter>, diff --git a/src/packetframe.rs b/src/packetframe.rs index d96cefc0..3211824c 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -22,7 +22,7 @@ const CHUNK_DEF: u16 = 8192; type BO = BigEndian; #[derive(Debug)] -struct Fuse(Result); +pub struct Fuse(Result); #[derive(Debug)] pub struct FrameReader { @@ -62,12 +62,12 @@ pub struct Broken { impl Fuse { #[throws(io::Error)] - fn get(&mut self) -> &mut RW { + pub fn get(&mut self) -> &mut RW { self.0.as_mut().map_err(|broken| broken.clone())? } #[throws(io::Error)] - fn with(&mut self, f: F) -> T + pub fn with(&mut self, f: F) -> T where F: FnOnce(&mut RW) -> Result { let inner = self.get()?; @@ -204,6 +204,14 @@ impl FrameWriter { self.inner.flush()?; } + #[throws(MgmtChannelWriteError)] + pub fn write_rmp(&mut self, t: &T) { + let mut frame = self.new_frame() + .map_err(|e| rmp_serde::encode::Error::InvalidValueWrite( + rmp::encode::ValueWriteError::InvalidMarkerWrite(e)))?; + rmp_serde::encode::write_named(&mut frame, t)? + } + #[throws(io::Error)] fn tidy(&mut self) { self.finish_any_frame(Err(SenderError))?;