summaryrefslogtreecommitdiffstats
path: root/futures/src/executor
diff options
context:
space:
mode:
Diffstat (limited to 'futures/src/executor')
-rw-r--r--futures/src/executor/async_std.rs17
-rw-r--r--futures/src/executor/null.rs15
-rw-r--r--futures/src/executor/thread_pool.rs16
-rw-r--r--futures/src/executor/tokio.rs20
-rw-r--r--futures/src/executor/wasm_bindgen.rs18
5 files changed, 86 insertions, 0 deletions
diff --git a/futures/src/executor/async_std.rs b/futures/src/executor/async_std.rs
new file mode 100644
index 00000000..27949e31
--- /dev/null
+++ b/futures/src/executor/async_std.rs
@@ -0,0 +1,17 @@
+use crate::Executor;
+
+use futures::Future;
+
+/// An `async-std` runtime.
+#[derive(Debug)]
+pub struct AsyncStd;
+
+impl Executor for AsyncStd {
+ fn new() -> Result<Self, futures::io::Error> {
+ Ok(Self)
+ }
+
+ fn spawn(&self, future: impl Future<Output = ()> + Send + 'static) {
+ let _ = async_std::task::spawn(future);
+ }
+}
diff --git a/futures/src/executor/null.rs b/futures/src/executor/null.rs
new file mode 100644
index 00000000..6d5cf982
--- /dev/null
+++ b/futures/src/executor/null.rs
@@ -0,0 +1,15 @@
+use crate::Executor;
+
+use futures::Future;
+
+/// An executor that drops all the futures, instead of spawning them.
+#[derive(Debug)]
+pub struct Null;
+
+impl Executor for Null {
+ fn new() -> Result<Self, futures::io::Error> {
+ Ok(Self)
+ }
+
+ fn spawn(&self, _future: impl Future<Output = ()> + Send + 'static) {}
+}
diff --git a/futures/src/executor/thread_pool.rs b/futures/src/executor/thread_pool.rs
new file mode 100644
index 00000000..1ec5bf69
--- /dev/null
+++ b/futures/src/executor/thread_pool.rs
@@ -0,0 +1,16 @@
+use crate::Executor;
+
+use futures::Future;
+
+/// A thread pool runtime for futures.
+pub type ThreadPool = futures::executor::ThreadPool;
+
+impl Executor for futures::executor::ThreadPool {
+ fn new() -> Result<Self, futures::io::Error> {
+ futures::executor::ThreadPool::new()
+ }
+
+ fn spawn(&self, future: impl Future<Output = ()> + Send + 'static) {
+ self.spawn_ok(future);
+ }
+}
diff --git a/futures/src/executor/tokio.rs b/futures/src/executor/tokio.rs
new file mode 100644
index 00000000..20802ceb
--- /dev/null
+++ b/futures/src/executor/tokio.rs
@@ -0,0 +1,20 @@
+use crate::Executor;
+
+use futures::Future;
+
+/// A `tokio` runtime.
+pub type Tokio = tokio::runtime::Runtime;
+
+impl Executor for Tokio {
+ fn new() -> Result<Self, futures::io::Error> {
+ tokio::runtime::Runtime::new()
+ }
+
+ fn spawn(&self, future: impl Future<Output = ()> + Send + 'static) {
+ let _ = tokio::runtime::Runtime::spawn(self, future);
+ }
+
+ fn enter<R>(&self, f: impl FnOnce() -> R) -> R {
+ tokio::runtime::Runtime::enter(self, f)
+ }
+}
diff --git a/futures/src/executor/wasm_bindgen.rs b/futures/src/executor/wasm_bindgen.rs
new file mode 100644
index 00000000..69b7c7e2
--- /dev/null
+++ b/futures/src/executor/wasm_bindgen.rs
@@ -0,0 +1,18 @@
+use crate::Executor;
+
+/// A `wasm-bindgen-futures` runtime.
+#[derive(Debug)]
+pub struct WasmBindgen;
+
+impl Executor for WasmBindgen {
+ fn new() -> Result<Self, futures::io::Error> {
+ Ok(Self)
+ }
+
+ fn spawn(
+ &self,
+ future: impl futures::Future<Output = ()> + Send + 'static,
+ ) {
+ wasm_bindgen_futures::spawn_local(future);
+ }
+}