summaryrefslogtreecommitdiffstats
path: root/third_party/rust/tokio-fs/src/read_link.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/tokio-fs/src/read_link.rs')
-rw-r--r--third_party/rust/tokio-fs/src/read_link.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/third_party/rust/tokio-fs/src/read_link.rs b/third_party/rust/tokio-fs/src/read_link.rs
new file mode 100644
index 0000000000..5e5bf2a30e
--- /dev/null
+++ b/third_party/rust/tokio-fs/src/read_link.rs
@@ -0,0 +1,46 @@
+use std::fs;
+use std::io;
+use std::path::{Path, PathBuf};
+
+use futures::{Future, Poll};
+
+/// Reads a symbolic link, returning the file that the link points to.
+///
+/// This is an async version of [`std::fs::read_link`][std]
+///
+/// [std]: https://doc.rust-lang.org/std/fs/fn.read_link.html
+pub fn read_link<P: AsRef<Path>>(path: P) -> ReadLinkFuture<P> {
+ ReadLinkFuture::new(path)
+}
+
+/// Future returned by `read_link`.
+#[derive(Debug)]
+pub struct ReadLinkFuture<P>
+where
+ P: AsRef<Path>
+{
+ path: P,
+}
+
+impl<P> ReadLinkFuture<P>
+where
+ P: AsRef<Path>
+{
+ fn new(path: P) -> ReadLinkFuture<P> {
+ ReadLinkFuture {
+ path: path,
+ }
+ }
+}
+
+impl<P> Future for ReadLinkFuture<P>
+where
+ P: AsRef<Path>
+{
+ type Item = PathBuf;
+ type Error = io::Error;
+
+ fn poll(&mut self) -> Poll<Self::Item, Self::Error> {
+ ::blocking_io(|| fs::read_link(&self.path) )
+ }
+}