fut_compat/task/
async_std.rs1use super::*;
2
3use futures::task::{Spawn, LocalSpawn};
4use futures::task::{SpawnError, FutureObj, LocalFutureObj};
5use futures::FutureExt;
6
7
8
9#[cfg(feature = "async-std-rt")]
11#[cfg_attr(docsrs, doc(cfg(feature = "async-std-rt")))]
12#[derive(Default, Clone, Copy, Debug, PartialEq, Eq, Hash)]
13pub struct AsyncStdExecutor {}
14
15impl Spawn for AsyncStdExecutor {
16 fn spawn_obj(
17 &self,
18 future: FutureObj<'static, ()>
19 ) -> Result<(), SpawnError> {
20 ::async_std::task::spawn(future);
21
22 Ok(())
23 }
24}
25
26impl LocalSpawn for AsyncStdExecutor {
27 fn spawn_local_obj(
28 &self,
29 future: LocalFutureObj<'static, ()>
30 ) -> Result<(), SpawnError> {
31 ::async_std::task::spawn_local(future);
32
33 Ok(())
34 }
35}
36
37impl SpawnBlocking for AsyncStdExecutor {
38 fn spawn_blocking<F, T>(f: F) -> JoinHandle<T>
39 where
40 F: FnOnce() -> T + Send + 'static,
41 T: Send + 'static,
42 {
43 let fut = ::async_std::task::spawn_blocking::<F, T>(f);
44 let fut = FutureExt::map(fut, |ret| {
45 let result: Result<T, Box<dyn Error>> = Ok(ret);
46
47 result
48 });
49
50 JoinHandle::new(fut)
51 }
52}