chiark / gitweb /
packetframe: Allow privately constructing one out of non-Buf
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 17 Apr 2021 12:08:39 +0000 (13:08 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 23 Apr 2021 18:32:07 +0000 (19:32 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/packetframe.rs

index f64960f75cc78f0f48a019572fbb35ea49193738..2bb536544a70494a8c6cb81735b54dd0890bb79a 100644 (file)
@@ -25,13 +25,13 @@ type BO = BigEndian;
 pub struct Fuse<RW>(Result<RW, Broken>);
 
 #[derive(Debug)]
-pub struct FrameReader<R: BufRead> {
+pub struct FrameReader<R: Read> {
   inner: Fuse<R>,
   in_frame: Option<usize>,
 }
 
 #[derive(Debug)]
-pub struct ReadFrame<'r,R:BufRead> {
+pub struct ReadFrame<'r,R:Read> {
   fr: Result<&'r mut FrameReader<R>, Option<SenderError>>,
 }
 
@@ -116,8 +116,11 @@ impl Display for Broken {
   }
 }
 
-impl<R:BufRead> FrameReader<R> {
-  pub fn new(r: R) -> FrameReader<R> {
+impl<R:Read> FrameReader<R> {
+  pub fn new(r: R) -> FrameReader<R> where R:BufRead {
+    Self::new_unbuf(r)
+  }
+  fn new_unbuf(r: R) -> FrameReader<R> {
     FrameReader { inner: Fuse(Ok(r)), in_frame: None }
   }
 
@@ -166,7 +169,7 @@ impl<R:BufRead> FrameReader<R> {
   }
 }
 
-impl<'r, R:BufRead> Read for ReadFrame<'r, R> {
+impl<'r, R:Read> Read for ReadFrame<'r, R> {
   #[throws(io::Error)]
   fn read(&mut self, buf: &mut [u8]) -> usize {
     if buf.len() == 0 { return 0 }