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
use std::error::Error; use std::fmt; /// Errors returned by `Executor::spawn`. /// /// Spawn errors should represent relatively rare scenarios. Currently, the two /// scenarios represented by `SpawnError` are: /// /// * An executor being at capacity or full. As such, the executor is not able /// to accept a new future. This error state is expected to be transient. /// * An executor has been shutdown and can no longer accept new futures. This /// error state is expected to be permanent. #[derive(Debug)] pub struct SpawnError { is_shutdown: bool, } impl SpawnError { /// Return a new `SpawnError` reflecting a shutdown executor failure. pub fn shutdown() -> Self { SpawnError { is_shutdown: true } } /// Return a new `SpawnError` reflecting an executor at capacity failure. pub fn at_capacity() -> Self { SpawnError { is_shutdown: false } } /// Returns `true` if the error reflects a shutdown executor failure. pub fn is_shutdown(&self) -> bool { self.is_shutdown } /// Returns `true` if the error reflects an executor at capacity failure. pub fn is_at_capacity(&self) -> bool { !self.is_shutdown } } impl fmt::Display for SpawnError { fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result { write!( fmt, "attempted to spawn task while the executor is at capacity or shut down" ) } } impl Error for SpawnError {}