diff options
Diffstat (limited to 'third_party/rust/tokio-fs/src/file/create.rs')
-rw-r--r-- | third_party/rust/tokio-fs/src/file/create.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/third_party/rust/tokio-fs/src/file/create.rs b/third_party/rust/tokio-fs/src/file/create.rs new file mode 100644 index 0000000000..4027418563 --- /dev/null +++ b/third_party/rust/tokio-fs/src/file/create.rs @@ -0,0 +1,37 @@ +use super::File; + +use futures::{Future, Poll}; + +use std::fs::File as StdFile; +use std::io; +use std::path::Path; + +/// Future returned by `File::create` and resolves to a `File` instance. +#[derive(Debug)] +pub struct CreateFuture<P> { + path: P, +} + +impl<P> CreateFuture<P> +where P: AsRef<Path> + Send + 'static, +{ + pub(crate) fn new(path: P) -> Self { + CreateFuture { path } + } +} + +impl<P> Future for CreateFuture<P> +where P: AsRef<Path> + Send + 'static, +{ + type Item = File; + type Error = io::Error; + + fn poll(&mut self) -> Poll<Self::Item, Self::Error> { + let std = try_ready!(::blocking_io(|| { + StdFile::create(&self.path) + })); + + let file = File::from_std(std); + Ok(file.into()) + } +} |