zero_formatter/
buffer.rs

1#[macro_export]
2macro_rules! declare_buffer {
3    ($name:ident) => (
4
5        pub struct $name<T: Seek + ReadBytesExt + WriteBytesExt> {
6            pub inner: T
7        }
8
9        impl<T> $name<T>
10            where T: Seek + ReadBytesExt + WriteBytesExt {
11
12            pub fn new(inner: T) -> Buffer<T> { Buffer { inner: inner } }
13        }
14
15        impl<T> Seek for $name<T>
16            where T: Seek + ReadBytesExt + WriteBytesExt {
17
18            fn seek(&mut self, style: SeekFrom) -> Result<u64> {
19                self.inner.seek(style)
20            }
21        }
22
23        impl<T> Read for $name<T>
24            where T: Seek + ReadBytesExt + WriteBytesExt {
25
26            fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
27                self.inner.read(buf)
28            }
29        }
30
31        impl<T> Write for $name<T>
32            where T: Seek + ReadBytesExt + WriteBytesExt {
33
34            fn write(&mut self, buf: &[u8]) -> Result<usize> {
35                self.inner.write(buf)
36            }
37
38            fn flush(&mut self) -> Result<()> {
39                self.inner.flush()
40            }
41        }
42    )
43}