1#[cfg(feature = "async-std")]
2pub use async_std::fs::File;
3#[cfg(feature = "tokio")]
4pub use tokio::fs::File;
5
6#[cfg(feature = "async-std")]
7pub use futures::io::AsyncRead;
8#[cfg(feature = "tokio")]
9pub use tokio::io::AsyncRead;
10
11#[cfg(feature = "async-std")]
12pub use futures::io::AsyncReadExt;
13#[cfg(feature = "tokio")]
14pub use tokio::io::AsyncReadExt;
15
16#[cfg(feature = "async-std")]
17pub use futures::io::AsyncBufReadExt;
18#[cfg(feature = "tokio")]
19pub use tokio::io::AsyncBufReadExt;
20
21#[cfg(feature = "async-std")]
22pub use futures::io::AsyncWrite;
23#[cfg(feature = "tokio")]
24pub use tokio::io::AsyncWrite;
25
26#[cfg(feature = "async-std")]
27pub use futures::io::AsyncWriteExt;
28#[cfg(feature = "tokio")]
29pub use tokio::io::AsyncWriteExt;
30
31#[cfg(feature = "async-std")]
32pub use async_std::fs::read;
33#[cfg(feature = "tokio")]
34pub use tokio::fs::read;
35
36#[cfg(feature = "async-std")]
37pub use async_std::fs::copy;
38#[cfg(feature = "tokio")]
39pub use tokio::fs::copy;
40
41#[cfg(feature = "async-std")]
42pub use async_std::fs::metadata;
43#[cfg(feature = "tokio")]
44pub use tokio::fs::metadata;
45
46#[cfg(feature = "async-std")]
47pub use async_std::fs::remove_file;
48#[cfg(feature = "tokio")]
49pub use tokio::fs::remove_file;
50
51#[cfg(feature = "async-std")]
52pub use async_std::fs::create_dir_all;
53#[cfg(feature = "tokio")]
54pub use tokio::fs::create_dir_all;
55
56#[cfg(feature = "async-std")]
57pub use async_std::fs::remove_dir_all;
58#[cfg(feature = "tokio")]
59pub use tokio::fs::remove_dir_all;
60
61#[cfg(feature = "async-std")]
62pub use async_std::fs::DirBuilder;
63#[cfg(feature = "tokio")]
64pub use tokio::fs::DirBuilder;
65
66#[cfg(feature = "async-std")]
67pub use async_std::fs::OpenOptions;
68#[cfg(feature = "tokio")]
69pub use tokio::fs::OpenOptions;
70
71#[cfg(feature = "async-std")]
72pub use async_std::io::BufReader;
73#[cfg(feature = "tokio")]
74pub use tokio::io::BufReader;
75
76#[cfg(feature = "async-std")]
77#[inline]
78pub fn lines_to_stream<R>(lines: futures::io::Lines<R>) -> futures::io::Lines<R> {
79 lines
80}
81#[cfg(feature = "tokio")]
82#[inline]
83pub fn lines_to_stream<R>(lines: tokio::io::Lines<R>) -> tokio_stream::wrappers::LinesStream<R> {
84 tokio_stream::wrappers::LinesStream::new(lines)
85}
86
87#[cfg(feature = "async-std")]
88pub use async_std::task::spawn_blocking;
89#[cfg(feature = "tokio")]
90pub use tokio::task::spawn_blocking;
91
92#[cfg(feature = "async-std")]
93pub use async_std::task::JoinHandle;
94#[cfg(feature = "async-std")]
95#[inline]
96pub fn unwrap_joinhandle_value<T>(value: T) -> T {
97 value
98}
99#[cfg(feature = "tokio")]
100pub use tokio::task::JoinHandle;
101#[cfg(feature = "tokio")]
102#[inline]
103pub fn unwrap_joinhandle_value<T>(value: T) -> T {
104 value
105}
106
107use tempfile::NamedTempFile;
108
109use crate::errors::IoErrorExt;
110
111#[cfg(feature = "async-std")]
112#[inline]
113pub async fn create_named_tempfile(
114 tmp_path: std::path::PathBuf,
115) -> Option<crate::Result<NamedTempFile>> {
116 let cloned = tmp_path.clone();
117
118 Some(
119 spawn_blocking(|| NamedTempFile::new_in(tmp_path))
120 .await
121 .with_context(|| format!("Failed to create a temp file at {}", cloned.display())),
122 )
123}
124
125#[cfg(feature = "tokio")]
126#[inline]
127pub async fn create_named_tempfile(
128 tmp_path: std::path::PathBuf,
129) -> Option<crate::Result<NamedTempFile>> {
130 let cloned = tmp_path.clone();
131 match spawn_blocking(|| NamedTempFile::new_in(tmp_path)).await {
132 Ok(ctx) => Some(
133 ctx.with_context(|| format!("Failed to create a temp file at {}", cloned.display())),
134 ),
135 _ => None,
136 }
137}