diff options
Diffstat (limited to 'third_party/rust/tokio-fs/src/file/seek.rs')
-rw-r--r-- | third_party/rust/tokio-fs/src/file/seek.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/third_party/rust/tokio-fs/src/file/seek.rs b/third_party/rust/tokio-fs/src/file/seek.rs new file mode 100644 index 0000000000..0765d3db90 --- /dev/null +++ b/third_party/rust/tokio-fs/src/file/seek.rs @@ -0,0 +1,37 @@ +use super::File; + +use futures::{Future, Poll}; + +use std::io; + +/// Future returned by `File::seek`. +#[derive(Debug)] +pub struct SeekFuture { + inner: Option<File>, + pos: io::SeekFrom, +} + +impl SeekFuture { + pub(crate) fn new(file: File, pos: io::SeekFrom) -> Self { + Self { + pos, + inner: Some(file), + } + } +} + +impl Future for SeekFuture { + type Item = (File, u64); + type Error = io::Error; + + fn poll(&mut self) -> Poll<Self::Item, Self::Error> { + let pos = try_ready!( + self.inner + .as_mut() + .expect("Cannot poll `SeekFuture` after it resolves") + .poll_seek(self.pos) + ); + let inner = self.inner.take().unwrap(); + Ok((inner, pos).into()) + } +} |