From 9f90c646100a4afe42414dba51d60436c0f3b1c1 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 16 Apr 2021 22:38:35 +0100 Subject: [PATCH] packetframe: Provide write_rmp Signed-off-by: Ian Jackson --- src/mgmtchannel.rs | 2 ++ src/packetframe.rs | 14 +++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) 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))?; -- 2.30.2