summaryrefslogtreecommitdiffstats
path: root/third_party/rust/tokio-fs/src/file/seek.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/tokio-fs/src/file/seek.rs')
-rw-r--r--third_party/rust/tokio-fs/src/file/seek.rs37
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())
+ }
+}