}
pub struct MgmtChannel {
- read: io::Lines<BufReader<Box<dyn Read>>>,
- write: BufWriter<Box<dyn Write>>,
+ read: FrameReader<BufReader<Box<dyn Read >>>,
+ write: FrameWriter<BufWriter<Box<dyn Write>>>,
}
impl Debug for MgmtChannel{
let read = conn.try_clone().context("dup the command stream")?;
let read = Box::new(read) as Box<dyn Read>;
let read = BufReader::new(read);
- let read = read.lines();
+ let read = FrameReader::new(read);
let write = Box::new(conn) as Box<dyn Write>;
let write = BufWriter::new(write);
+ let write = FrameWriter::new(write);
MgmtChannel { read, write }
}
#[throws(MgmtChannelReadError)]
pub fn read<T:DeserializeOwned>(&mut self) -> T {
use MgmtChannelReadError::*;
- let l = self.read.next().ok_or(EOF)??;
- let r = serde_json::from_str(&l);
+ let f = self.read.new_frame()?.ok_or(MgmtChannelReadError::EOF)?;
+ let r = serde_json::from_reader(f);
let v = r.map_err(|e| Parse(format!("{}", &e)))?;
v
}
#[throws(io::Error)]
pub fn write<T:Serialize>(&mut self, val: &T) {
- serde_json::to_writer(&mut self.write, val)?;
- write!(self.write, "\n")?;
+ let mut f = self.write.new_frame()?;
+ serde_json::to_writer(&mut f, val)?;
+ f.finish()?;
self.write.flush()?;
}
pub use crate::nwtemplates;
pub use crate::occultilks::*;
pub use crate::organise;
+pub use crate::packetframe::{FrameReader, FrameWriter};
pub use crate::pcaliases::*;
pub use crate::pcrender::*;
pub use crate::pieces::*;