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}