 26d6145915
			
		
	
	
		26d6145915
		
	
	
	
	
		
			
			# Objective Partially address #3492. ## Solution Document the remaining undocumented members of `bevy_utils` and set `warn(missing_docs)` on the crate level. Also enabled `clippy::undocumented_unsafe_blocks` as a warning on the crate to keep it in sync with `bevy_ecs`'s warnings.
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //! Utilities for working with [`Future`]s.
 | |
| //!
 | |
| //! [`Future`]: std::future::Future
 | |
| use std::{
 | |
|     future::Future,
 | |
|     pin::Pin,
 | |
|     task::{Context, Poll, RawWaker, RawWakerVTable, Waker},
 | |
| };
 | |
| 
 | |
| /// Consumes the future, polls it once, and immediately returns the output
 | |
| /// or returns `None` if it wasn't ready yet.
 | |
| ///
 | |
| /// This will cancel the future if it's not ready.
 | |
| pub fn now_or_never<F: Future>(mut future: F) -> Option<F::Output> {
 | |
|     let noop_waker = noop_waker();
 | |
|     let mut cx = Context::from_waker(&noop_waker);
 | |
| 
 | |
|     // SAFETY: `future` is not moved and the original value is shadowed
 | |
|     let future = unsafe { Pin::new_unchecked(&mut future) };
 | |
| 
 | |
|     match future.poll(&mut cx) {
 | |
|         Poll::Ready(x) => Some(x),
 | |
|         _ => None,
 | |
|     }
 | |
| }
 | |
| 
 | |
| unsafe fn noop_clone(_data: *const ()) -> RawWaker {
 | |
|     noop_raw_waker()
 | |
| }
 | |
| unsafe fn noop(_data: *const ()) {}
 | |
| 
 | |
| const NOOP_WAKER_VTABLE: RawWakerVTable = RawWakerVTable::new(noop_clone, noop, noop, noop);
 | |
| 
 | |
| fn noop_raw_waker() -> RawWaker {
 | |
|     RawWaker::new(std::ptr::null(), &NOOP_WAKER_VTABLE)
 | |
| }
 | |
| 
 | |
| fn noop_waker() -> Waker {
 | |
|     // SAFETY: the `RawWakerVTable` is just a big noop and doesn't violate any of the rules in `RawWakerVTable`s documentation
 | |
|     // (which talks about retaining and releasing any "resources", of which there are none in this case)
 | |
|     unsafe { Waker::from_raw(noop_raw_waker()) }
 | |
| }
 |