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)
}
}