use core::{ops::DerefMut, pin::Pin};
pub trait Seek {
fn seek(&mut self, pos: u64);
fn position(&self) -> u64;
fn len(&self) -> u64;
fn is_empty(&self) -> bool {
self.len() == 0
}
}
impl<S> Seek for &mut S
where
S: Seek + ?Sized,
{
fn seek(&mut self, pos: u64) {
(**self).seek(pos);
}
fn position(&self) -> u64 {
(**self).position()
}
fn len(&self) -> u64 {
(**self).len()
}
}
impl<S, T> Seek for Pin<S>
where
S: DerefMut<Target = T>,
T: Seek + Unpin,
{
fn seek(&mut self, pos: u64) {
self.as_mut().get_mut().seek(pos);
}
fn position(&self) -> u64 {
self.as_ref().get_ref().position()
}
fn len(&self) -> u64 {
self.as_ref().get_ref().len()
}
}