chiark / gitweb /
before into for mgmt errors
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 15:10:30 +0000 (16:10 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 13 Aug 2020 15:10:42 +0000 (16:10 +0100)
src/cmdlistener.rs
src/mgmtchannel.rs

index dc7dc877b7d1fa42db4fec72bfce0d1b574966ca..8300ff59d900b14a2d57271fc6a87593bef2b56e 100644 (file)
@@ -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)]
index 7d210f36993b2acdb2bea76fb34cac347139988c..91f22d3bec5b9dc0892f6691c036f840861abae5 100644 (file)
@@ -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<U : Read + Write> {
@@ -25,14 +25,19 @@ impl<U: IoTryClone + Read + Write> MgmtChannel<U> {
     MgmtChannel { read, write }
   }
 
-  #[throws(MgmthannelReadError)]
-  fn read<T>(&mut self) -> Option<T> {
+  #[throws(MgmtChannelReadError)]
+  pub fn read<T>(&mut self) -> Option<T> {
     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<T:Serialize>(&mut self, val: &T) {
+    serde_lexpr::to_writer(&mut self.write, val)?;
+  }
 }
 
 trait IoTryClone : Sized {