summaryrefslogtreecommitdiffstats
path: root/futures/src/executor.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón <hector0193@gmail.com>2020-01-21 00:15:01 +0100
committerLibravatar GitHub <noreply@github.com>2020-01-21 00:15:01 +0100
commit7016221556ea8183ebcd8ef8df00044e2eda71e7 (patch)
treebc1609b71b88437fc7497af339b6427f63121c76 /futures/src/executor.rs
parent6ca5e6184f9f1c12b427bdafcce0b4e9fbc5bb14 (diff)
parent91d9d65a03ce9b211e4043726e7424949d314325 (diff)
downloadiced-7016221556ea8183ebcd8ef8df00044e2eda71e7.tar.gz
iced-7016221556ea8183ebcd8ef8df00044e2eda71e7.tar.bz2
iced-7016221556ea8183ebcd8ef8df00044e2eda71e7.zip
Merge pull request #164 from hecrj/feature/custom-runtime
Custom futures executor with `iced_futures`
Diffstat (limited to 'futures/src/executor.rs')
-rw-r--r--futures/src/executor.rs55
1 files changed, 55 insertions, 0 deletions
diff --git a/futures/src/executor.rs b/futures/src/executor.rs
new file mode 100644
index 00000000..c2b9cc72
--- /dev/null
+++ b/futures/src/executor.rs
@@ -0,0 +1,55 @@
+//! Choose your preferred executor to power a runtime.
+mod null;
+
+#[cfg(feature = "thread-pool")]
+mod thread_pool;
+
+#[cfg(feature = "tokio")]
+mod tokio;
+
+#[cfg(feature = "async-std")]
+mod async_std;
+
+#[cfg(target_arch = "wasm32")]
+mod wasm_bindgen;
+
+pub use null::Null;
+
+#[cfg(feature = "thread-pool")]
+pub use thread_pool::ThreadPool;
+
+#[cfg(feature = "tokio")]
+pub use self::tokio::Tokio;
+
+#[cfg(feature = "async-std")]
+pub use self::async_std::AsyncStd;
+
+#[cfg(target_arch = "wasm32")]
+pub use wasm_bindgen::WasmBindgen;
+
+use futures::Future;
+
+/// A type that can run futures.
+pub trait Executor: Sized {
+ /// Creates a new [`Executor`].
+ ///
+ /// [`Executor`]: trait.Executor.html
+ fn new() -> Result<Self, futures::io::Error>
+ where
+ Self: Sized;
+
+ /// Spawns a future in the [`Executor`].
+ ///
+ /// [`Executor`]: trait.Executor.html
+ fn spawn(&self, future: impl Future<Output = ()> + Send + 'static);
+
+ /// Runs the given closure inside the [`Executor`].
+ ///
+ /// Some executors, like `tokio`, require some global state to be in place
+ /// before creating futures. This method can be leveraged to set up this
+ /// global state, call a function, restore the state, and obtain the result
+ /// of the call.
+ fn enter<R>(&self, f: impl FnOnce() -> R) -> R {
+ f()
+ }
+}