From: Ian Jackson Date: Thu, 13 Aug 2020 15:10:30 +0000 (+0100) Subject: before into for mgmt errors X-Git-Tag: otter-0.2.0~1137 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=930dded762f13ddf9a1a8d579c0c121c9ebe01b1;p=otter.git before into for mgmt errors --- diff --git a/src/cmdlistener.rs b/src/cmdlistener.rs index dc7dc877..8300ff59 100644 --- a/src/cmdlistener.rs +++ b/src/cmdlistener.rs @@ -41,17 +41,17 @@ impl CommandStream<'_> { #[throws(CSE)] pub fn mainloop(mut self) { use MgmtChannelReadError::*; - let resp = match self.chan.read()? { - Ok(Some(cmd)) => execute(&mut self, cmd), + let resp = match self.chan.read() { + Ok(Some(cmd)) => match execute(&mut self, cmd), Err(IO(ioe)) => { eprintln!("{}: io error reading: {}", &self.desc, ioe); return; } - Err(ParseFailed(s)) => MgmtResponse::Error { + Err(Parse(s)) => MgmtResponse::Error { error: MgmtError::ParseFailed(s), }, }; - serde_lexpr::to_writer(&mut cs.write, &resp)?; + self.chan.write(&resp)?; } #[throws(MgmtError)] diff --git a/src/mgmtchannel.rs b/src/mgmtchannel.rs index 7d210f36..91f22d3b 100644 --- a/src/mgmtchannel.rs +++ b/src/mgmtchannel.rs @@ -6,7 +6,7 @@ pub enum MgmtChannelReadError { Parse(String), IO(#[from] io::Error), } -display_as_debug!{MgmtChannelError} +display_as_debug!{MgmtChannelReadError} #[derive(Clone,Debug)] pub struct MgmtChannel { @@ -25,14 +25,19 @@ impl MgmtChannel { MgmtChannel { read, write } } - #[throws(MgmthannelReadError)] - fn read(&mut self) -> Option { + #[throws(MgmtChannelReadError)] + pub fn read(&mut self) -> Option { let lq = self.read.next().map_err(MgmtChannelReadError::IO)?; let incoming : T = lq.map( |l| serde_lexpr::from_str(l) ).collect().map_err(|e| MgmtChannelReadError::Parse("{}", &e))?; incoming } + + #[throws(io::Error)] + pub fn write(&mut self, val: &T) { + serde_lexpr::to_writer(&mut self.write, val)?; + } } trait IoTryClone : Sized {