fs: use async fn instead of custom futures (#1381)

Also update all the doc examples.
This commit is contained in:
Carl Lerche
2019-08-04 11:24:30 -07:00
committed by GitHub
parent 337646b97f
commit 6cbe3d4f82
36 changed files with 691 additions and 1668 deletions
+24 -27
View File
@@ -2,6 +2,7 @@
#![deny(missing_docs, missing_debug_implementations, rust_2018_idioms)]
#![cfg_attr(test, deny(warnings))]
#![doc(test(no_crate_inject, attr(deny(rust_2018_idioms))))]
#![feature(async_await)]
//! Asynchronous file and standard stream adaptation.
//!
@@ -32,9 +33,10 @@
mod create_dir;
mod create_dir_all;
pub mod file;
mod file;
mod hard_link;
mod metadata;
mod open_options;
pub mod os;
mod read;
mod read_dir;
@@ -50,28 +52,28 @@ mod stdout;
mod symlink_metadata;
mod write;
pub use crate::create_dir::{create_dir, CreateDirFuture};
pub use crate::create_dir_all::{create_dir_all, CreateDirAllFuture};
pub use crate::create_dir::create_dir;
pub use crate::create_dir_all::create_dir_all;
pub use crate::file::File;
pub use crate::file::OpenOptions;
pub use crate::hard_link::{hard_link, HardLinkFuture};
pub use crate::metadata::{metadata, MetadataFuture};
pub use crate::read::{read, ReadFile};
pub use crate::read_dir::{read_dir, DirEntry, ReadDir, ReadDirFuture};
pub use crate::read_link::{read_link, ReadLinkFuture};
pub use crate::remove_dir::{remove_dir, RemoveDirFuture};
pub use crate::remove_dir_all::{remove_dir_all, RemoveDirAllFuture};
pub use crate::remove_file::{remove_file, RemoveFileFuture};
pub use crate::rename::{rename, RenameFuture};
pub use crate::set_permissions::{set_permissions, SetPermissionsFuture};
pub use crate::hard_link::hard_link;
pub use crate::metadata::metadata;
pub use crate::open_options::OpenOptions;
pub use crate::read::read;
pub use crate::read_dir::{read_dir, DirEntry, ReadDir};
pub use crate::read_link::read_link;
pub use crate::remove_dir::remove_dir;
pub use crate::remove_dir_all::remove_dir_all;
pub use crate::remove_file::remove_file;
pub use crate::rename::rename;
pub use crate::set_permissions::set_permissions;
pub use crate::stderr::{stderr, Stderr};
pub use crate::stdin::{stdin, Stdin};
pub use crate::stdout::{stdout, Stdout};
pub use crate::symlink_metadata::{symlink_metadata, SymlinkMetadataFuture};
pub use crate::write::{write, WriteFile};
pub use crate::symlink_metadata::symlink_metadata;
pub use crate::write::write;
use std::io;
use std::io::ErrorKind::{Other, WouldBlock};
use std::io::ErrorKind::Other;
use std::task::Poll;
use std::task::Poll::*;
@@ -86,19 +88,14 @@ where
}
}
fn would_block<F, T>(f: F) -> io::Result<T>
async fn asyncify<F, T>(f: F) -> io::Result<T>
where
F: FnOnce() -> io::Result<T>,
{
match tokio_threadpool::blocking(f) {
Ready(Ok(Ok(v))) => Ok(v),
Ready(Ok(Err(err))) => {
debug_assert_ne!(err.kind(), WouldBlock);
Err(err)
}
Ready(Err(_)) => Err(blocking_err()),
Pending => Err(blocking_err()),
}
use futures_util::future::poll_fn;
let mut f = Some(f);
poll_fn(move |_| blocking_io(|| f.take().unwrap()())).await
}
fn blocking_err() -> io::Error {