use std::io;
use std::io::{Read, Seek, SeekFrom};
pub trait ForwardSeek {
fn skip(&mut self, n: u64) -> io::Result<u64>;
}
impl<S: ?Sized> ForwardSeek for S
where
S: Seek,
{
fn skip(&mut self, n: u64) -> io::Result<u64> {
let curr_pos = self.seek(SeekFrom::Current(0))?;
let new_pos = self.seek(SeekFrom::Current(n as i64))?;
Ok(new_pos - curr_pos)
}
}
pub trait ReadSeek: Read + Seek {}
impl<T: ?Sized> ReadSeek for T where T: Read + Seek {}