From d193ed32f69dd2cfa66998308e916a09cb1cdd51 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 16 Apr 2021 02:05:41 +0100 Subject: [PATCH] packetframe: wip some basic tests, and fixes Signed-off-by: Ian Jackson --- src/packetframe.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/packetframe.rs b/src/packetframe.rs index 9876f04d..6e91fa25 100644 --- a/src/packetframe.rs +++ b/src/packetframe.rs @@ -117,6 +117,10 @@ impl Display for Broken { } impl FrameReader { + pub fn new(r: R) -> FrameReader { + FrameReader { inner: Fuse(Ok(r)), in_frame: None } + } + #[throws(io::Error)] pub fn new_frame<'r>(&'r mut self) -> ReadFrame<'r,R> { if self.in_frame.is_some() { @@ -173,6 +177,10 @@ impl<'r, R:BufRead> Read for ReadFrame<'r, R> { } impl FrameWriter { + pub fn new(w: W) -> FrameWriter { + FrameWriter { inner: Fuse(Ok(w)), in_frame: None } + } + #[throws(io::Error)] pub fn new_frame<'w>(&'w mut self) -> WriteFrame<'w,W> { self.tidy(Err(SenderError))?; @@ -215,7 +223,7 @@ impl<'w,W:Write> Drop for WriteFrameRaw<'w,W> { .unwrap_or_else(|_: io::Error| () /* Fuse will replicate this */); } } -impl<'r, R:Write> Write for WriteFrameRaw<'r, R> { +impl<'w,W:Write> Write for WriteFrameRaw<'w,W> { #[throws(io::Error)] fn write(&mut self, buf: &[u8]) -> usize { let now = min(buf.len(), CHUNK_MAX.into()); @@ -229,3 +237,20 @@ impl<'r, R:Write> Write for WriteFrameRaw<'r, R> { self.fw.inner.flush()? } } +impl<'w,W:Write> Write for WriteFrame<'w,W> { + #[throws(io::Error)] + fn write(&mut self, buf: &[u8]) -> usize { self.buf.write(buf)? } + #[throws(io::Error)] + fn flush(&mut self) { self.buf.flush()? } +} + +#[test] +fn write_test(){ + let mut buf = vec![]; + let mut wr = FrameWriter::new(&mut buf); + { + let mut frame = wr.new_frame().unwrap(); + frame.write(b"hi").unwrap(); + } + dbg!(buf); +} -- 2.30.2