use flume::Receiver;
use std::io;
pub struct StreamReader {
receiver: Receiver<Vec<u8>>,
current: io::Cursor<Vec<u8>>,
}
impl StreamReader {
pub fn new(receiver: Receiver<Vec<u8>>) -> Self {
Self {
receiver,
current: io::Cursor::new(vec![]),
}
}
}
impl io::Read for StreamReader {
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
if self.current.position() == self.current.get_ref().len() as u64 {
if let Ok(vec) = self.receiver.recv() {
self.current = io::Cursor::new(vec);
}
}
self.current.read(buf)
}
}