mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-09-07 00:00:08 +02:00
fs: use async fn instead of custom futures (#1381)
Also update all the doc examples.
This commit is contained in:
+24
-27
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user