#[cfg(feature = "std")]
pub type DefaultSpawner = NativeSpawner;
#[cfg(not(feature = "std"))]
pub type DefaultSpawner = DropSpawner;
pub trait Spawner: 'static + Send + Sync {
fn spawn<F>(&self, f: F)
where
F: 'static + FnOnce() + Send;
}
#[cfg(feature = "std")]
pub use native_spawner::NativeSpawner;
#[cfg(feature = "std")]
mod native_spawner {
use super::Spawner;
#[derive(Clone, Copy, Debug, Default)]
pub struct NativeSpawner {
_private: (),
}
impl Spawner for NativeSpawner {
fn spawn<F>(&self, f: F)
where
F: 'static + FnOnce() + Send,
{
std::thread::spawn(f);
}
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct DropSpawner {
_private: (),
}
impl Spawner for DropSpawner {
fn spawn<F>(&self, _f: F)
where
F: 'static + FnOnce() + Send,
{
}
}
#[derive(Clone, Copy, Debug, Default)]
pub struct ImmediateSpawner {
_private: (),
}
impl Spawner for ImmediateSpawner {
fn spawn<F>(&self, f: F)
where
F: 'static + FnOnce() + Send,
{
f();
}
}