1use crate::{Read, Result, Write};
2
3pub struct ReadFn<R> {
5 r: R,
6}
7
8pub fn read_fn<R>(r: R) -> ReadFn<R>
10where
11 R: FnMut(&mut [u8]) -> Result<usize>,
12{
13 ReadFn { r }
14}
15
16impl<R> Read for ReadFn<R>
17where
18 R: FnMut(&mut [u8]) -> Result<usize>,
19{
20 #[inline]
21 fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
22 (self.r)(buf)
23 }
24}
25
26pub struct WriteFn<W> {
28 w: W,
29}
30
31pub fn write_fn<W>(w: W) -> WriteFn<W>
33where
34 W: FnMut(&[u8]) -> Result<usize>,
35{
36 WriteFn { w }
37}
38
39impl<W> Write for WriteFn<W>
40where
41 W: FnMut(&[u8]) -> Result<usize>,
42{
43 #[inline]
44 fn write(&mut self, buf: &[u8]) -> Result<usize> {
45 (self.w)(buf)
46 }
47
48 #[inline]
49 fn flush(&mut self) -> Result<()> {
50 Ok(())
51 }
52}