embytes_buffer_async/
pipe.rs1use crate::{AsyncBuffer, BufferReader, BufferWriter};
2
3pub struct ReadPipe<'a, 'b, const C: usize, T: AsRef<[u8]> + AsMut<[u8]>, S: embedded_io_async::Read> {
4 source: &'a mut S,
5 target: BufferWriter<'b, C, T>
6}
7
8impl <'a, 'b, const C: usize, T: AsRef<[u8]> + AsMut<[u8]>, S: embedded_io_async::Read> ReadPipe<'a, 'b, C, T, S> {
9
10 pub fn new(source: &'a mut S, buffer: &'b AsyncBuffer<C, T>) -> Self {
11 Self {
12 source: source,
13 target: buffer.create_writer()
14 }
15 }
16
17 pub async fn run(&mut self) -> Result<(), S::Error> {
18 use embedded_io_async::Write;
19
20 let mut buf = [0; 64];
21 loop {
22 let n = self.source.read(&mut buf).await?;
23 self.target.write_all(&buf[..n]).await.unwrap();
24 }
25 }
26}
27
28pub struct WritePipe<'a, 'b, const C: usize, T: AsRef<[u8]> + AsMut<[u8]>, S: embedded_io_async::Write> {
29 target: &'a mut S,
30 source: BufferReader<'b, C, T>
31}
32
33impl <'a, 'b, const C: usize, T: AsRef<[u8]> + AsMut<[u8]>, S: embedded_io_async::Write> WritePipe<'a, 'b, C, T, S> {
34
35 pub fn new(target: &'a mut S, buffer: &'b AsyncBuffer<C, T>) -> Self {
36 Self {
37 target: target,
38 source: buffer.create_reader()
39 }
40 }
41
42 pub async fn run(&mut self) -> Result<(), S::Error> {
43 use embedded_io_async::Read;
44
45 let mut buf = [0; 64];
46 loop {
47 let n = self.source.read(&mut buf).await.unwrap();
48 self.target.write_all(&buf[..n]).await?;
49 }
50 }
51}