1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
use std::io; use std::fs::File; trait Trunc { fn trunc(&mut self, size: u64) -> io::Result<()>; } impl Trunc for File { fn trunc(&mut self, size: u64) -> io::Result<()> { self.set_len(size) } } impl<'a> Trunc for &'a File { fn trunc(&mut self, size: u64) -> io::Result<()> { self.set_len(size) } } impl<R: Trunc + io::Read> Trunc for io::BufReader<R> { fn trunc(&mut self, size: u64) -> io::Result<()> { self.get_mut().trunc(size) } } impl<W: Trunc + io::Write> Trunc for io::BufWriter<W> { fn trunc(&mut self, size: u64) -> io::Result<()> { self.get_mut().trunc(size) } } impl Trunc for Vec<u8> { fn trunc(&mut self, size: u64) -> io::Result<()> { Ok(self.resize(size as usize, 0)) } } impl Trunc for io::Cursor<Vec<u8>> { fn trunc(&mut self, size: u64) -> io::Result<()> { Ok(self.get_mut().resize(size as usize, 0)) } } impl<'a, T: Trunc + ?Sized> Trunc for &'a mut T { fn trunc(&mut self, size: u64) -> io::Result<()> { (**self).trunc(size) } } impl<'a, T: Trunc + ?Sized> Trunc for Box<T> { fn trunc(&mut self, size: u64) -> io::Result<()> { (**self).trunc(size) } }