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
use futures_core::future::FutureObj; use futures_core::task::{Spawn, SpawnObjError}; /// An implementation of [`Spawn`](futures_core::task::Spawn) that /// discards spawned futures when used. /// /// # Examples /// /// ``` /// #![feature(async_await, futures_api)] /// use futures::task::SpawnExt; /// use futures_test::task::{panic_context, NoopSpawner}; /// /// let mut cx = panic_context(); /// let mut spawn = NoopSpawner::new(); /// let cx = &mut cx.with_spawner(&mut spawn); /// /// cx.spawner().spawn(async { }); /// ``` #[derive(Debug)] pub struct NoopSpawner { _reserved: (), } impl NoopSpawner { /// Create a new instance pub fn new() -> Self { Self { _reserved: () } } } impl Spawn for NoopSpawner { fn spawn_obj( &mut self, _future: FutureObj<'static, ()>, ) -> Result<(), SpawnObjError> { Ok(()) } } impl Default for NoopSpawner { fn default() -> Self { Self::new() } } /// Get a reference to a singleton instance of [`NoopSpawner`]. /// /// # Examples /// /// ``` /// #![feature(async_await, futures_api)] /// use futures::task::{self, SpawnExt}; /// use futures_test::task::{noop_local_waker_ref, noop_spawner_mut}; /// /// let mut cx = task::Context::new( /// noop_local_waker_ref(), /// noop_spawner_mut(), /// ); /// /// cx.spawner().spawn(async { }); /// ``` pub fn noop_spawner_mut() -> &'static mut NoopSpawner { Box::leak(Box::new(NoopSpawner::new())) }