pub trait AsyncSeek {
async fn seek(&mut self, pos: SeekFrom) -> super::Result<u64>;
async fn rewind(&mut self) -> super::Result<()> {
self.seek(SeekFrom::Start(0)).await?;
Ok(())
}
async fn stream_len(&mut self) -> super::Result<u64> {
let old_pos = self.stream_position().await?;
let len = self.seek(SeekFrom::End(0)).await?;
if old_pos != len {
self.seek(SeekFrom::Start(old_pos)).await?;
}
Ok(len)
}
async fn stream_position(&mut self) -> super::Result<u64> {
self.seek(SeekFrom::Current(0)).await
}
async fn seek_relative(&mut self, offset: i64) -> super::Result<()> {
self.seek(SeekFrom::Current(offset)).await?;
Ok(())
}
}
#[derive(Copy, PartialEq, Eq, Clone, Debug)]
pub enum SeekFrom {
Start(u64),
End(i64),
Current(i64),
}