From 5b09022560aff178be5c581cf5bd2f68067d70b6 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 16 Apr 2021 23:53:59 +0100 Subject: [PATCH] packetframe: Sort out MgmtChannelWriteError Signed-off-by: Ian Jackson --- src/mgmtchannel.rs | 21 ++++++++++++++++++++- src/packetframe.rs | 4 +--- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/mgmtchannel.rs b/src/mgmtchannel.rs index b91b3fbd..c3a7f97d 100644 --- a/src/mgmtchannel.rs +++ b/src/mgmtchannel.rs @@ -13,7 +13,26 @@ pub enum MgmtChannelReadError { } display_as_debug!{MgmtChannelReadError} -pub type MgmtChannelWriteError = rmp_serde::encode::Error; +#[derive(Debug,Error)] +pub enum MgmtChannelWriteError { + Serialize(rmp_serde::encode::Error), // but not ValueWriteError so no from + IO(#[from] io::Error), +} +display_as_debug!{MgmtChannelWriteError} + +impl From for MgmtChannelWriteError { + fn from(re: rmp_serde::encode::Error) -> MgmtChannelWriteError { + use rmp_serde::encode::Error::*; + use MgmtChannelWriteError as MCWE; + use rmp::encode::ValueWriteError as RVWE; + match re { + InvalidValueWrite(RVWE::InvalidMarkerWrite(ioe)) => MCWE::IO(ioe), + InvalidValueWrite(RVWE::InvalidDataWrite (ioe)) => MCWE::IO(ioe), + ser@ (UnknownLength | InvalidDataModel(_) | + DepthLimitExceeded | Syntax(_)) => MCWE::Serialize(ser), + } + } +} pub struct MgmtChannel { read: io::Lines>>, diff --git a/src/packetframe.rs b/src/packetframe.rs index 3211824c..6be227cd 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -206,9 +206,7 @@ impl FrameWriter { #[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)))?; + let mut frame = self.new_frame()?; rmp_serde::encode::write_named(&mut frame, t)? } -- 2.30.2