-
Notifications
You must be signed in to change notification settings - Fork 27
/
futures_support.rs
114 lines (103 loc) · 3.07 KB
/
futures_support.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//! Async support with a built-in thread pool.
use crate::{async_support, async_support::BlockingExecutor, DecodeCallback, Ownership, Result};
use async_trait::async_trait;
use futures_io::{AsyncRead, AsyncWrite};
use std::path::Path;
struct FuturesBlockingExecutor {}
#[async_trait]
impl BlockingExecutor for FuturesBlockingExecutor {
async fn execute_blocking<T, F>(f: F) -> Result<T>
where
T: Send + 'static,
F: FnOnce() -> T + Send + 'static,
{
Ok(blocking::unblock(f).await)
}
}
const FUTURES_BLOCKING_EXECUTOR: FuturesBlockingExecutor = FuturesBlockingExecutor {};
/// Async version of
/// [`list_archive_files_with_encoding`](crate::
/// list_archive_files_with_encoding).
pub async fn list_archive_files_with_encoding<R>(
source: R,
decode: DecodeCallback,
) -> Result<Vec<String>>
where
R: AsyncRead + Unpin,
{
async_support::list_archive_files_with_encoding(FUTURES_BLOCKING_EXECUTOR, source, decode).await
}
/// Async version of [`list_archive_files`](crate::list_archive_files).
pub async fn list_archive_files<R>(source: R) -> Result<Vec<String>>
where
R: AsyncRead + Unpin,
{
async_support::list_archive_files(FUTURES_BLOCKING_EXECUTOR, source).await
}
/// Async version of [`uncompress_data`](crate::uncompress_data).
pub async fn uncompress_data<R, W>(source: R, target: W) -> Result<usize>
where
R: AsyncRead + Unpin,
W: AsyncWrite + Unpin,
{
async_support::uncompress_data(FUTURES_BLOCKING_EXECUTOR, source, target).await
}
/// Async version of
/// [`uncompress_archive_with_encoding`](crate::
/// uncompress_archive_with_encoding).
pub async fn uncompress_archive_with_encoding<R>(
source: R,
dest: &Path,
ownership: Ownership,
decode: DecodeCallback,
) -> Result<()>
where
R: AsyncRead + Unpin,
{
async_support::uncompress_archive_with_encoding(
FUTURES_BLOCKING_EXECUTOR,
source,
dest,
ownership,
decode,
)
.await
}
/// Async version of [`uncompress_archive`](crate::uncompress_archive).
pub async fn uncompress_archive<R>(source: R, dest: &Path, ownership: Ownership) -> Result<()>
where
R: AsyncRead + Unpin,
{
async_support::uncompress_archive(FUTURES_BLOCKING_EXECUTOR, source, dest, ownership).await
}
/// Async version of
/// [`uncompress_archive_file_with_encoding`](crate::
/// uncompress_archive_file_with_encoding).
pub async fn uncompress_archive_file_with_encoding<R, W>(
source: R,
target: W,
path: &str,
decode: DecodeCallback,
) -> Result<usize>
where
R: AsyncRead + Unpin,
W: AsyncWrite + Unpin,
{
async_support::uncompress_archive_file_with_encoding(
FUTURES_BLOCKING_EXECUTOR,
source,
target,
path,
decode,
)
.await
}
/// Async version of
/// [`uncompress_archive_file`](crate::uncompress_archive_file).
pub async fn uncompress_archive_file<R, W>(source: R, target: W, path: &str) -> Result<usize>
where
R: AsyncRead + Unpin,
W: AsyncWrite + Unpin,
{
async_support::uncompress_archive_file(FUTURES_BLOCKING_EXECUTOR, source, target, path).await
}