| 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()) |
| } |
| } |