loop {
use MgmtChannelReadError::*;
let resp = match self.chan.read() {
- Ok(cmd) => execute(&mut self, cmd)?,
+ Ok(cmd) => match execute(&mut self, cmd) {
+ Ok(resp) => resp,
+ Err(error) => MgmtResponse::Error { error },
+ },
Err(EOF) => break,
Err(IO(e)) => Err(e).context("read command stream")?,
Err(Parse(s)) => MgmtResponse::Error { error : ParseFailed(s) },
#[throws(ME)]
fn execute(cs: &mut CommandStream, cmd: MgmtCommand) -> MgmtResponse {
- eprintln!("{:?} executing {:?}", &cs.desc, &cmd);
+ eprintln!("command connection {}: executing {:?}", &cs.desc, &cmd);
match cmd {
Noop { } => Fine { },
#[throws(io::Error)]
pub fn write<T:Serialize>(&mut self, val: &T) {
serde_lexpr::to_writer(&mut self.write, val)?;
+ write!(self.write, "\n")?;
+ self.write.flush()?;
}
}