diff --git a/tokio-executor/src/enter.rs b/tokio-executor/src/enter.rs index 3da0d796b..cb2879cec 100644 --- a/tokio-executor/src/enter.rs +++ b/tokio-executor/src/enter.rs @@ -1,5 +1,6 @@ use std::prelude::v1::*; use std::cell::Cell; +use std::error::Error; use std::fmt; #[cfg(feature = "unstable-futures")] @@ -27,11 +28,23 @@ pub struct EnterError { impl fmt::Debug for EnterError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_struct("EnterError") - .field("reason", &"attempted to run an executor while another executor is already running") + .field("reason", &self.description()) .finish() } } +impl fmt::Display for EnterError { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + write!(fmt, "{}", self.description()) + } +} + +impl Error for EnterError { + fn description(&self) -> &str { + "attempted to run an executor while another executor is already running" + } +} + /// Marks the current thread as being within the dynamic extent of an /// executor. /// diff --git a/tokio-executor/src/lib.rs b/tokio-executor/src/lib.rs index e4a886907..356832232 100644 --- a/tokio-executor/src/lib.rs +++ b/tokio-executor/src/lib.rs @@ -52,6 +52,9 @@ pub use global::spawn2; use futures::Future; +use std::error::Error; +use std::fmt; + /// A value that executes futures. /// /// The [`spawn`] function is used to submit a future to an executor. Once @@ -238,3 +241,15 @@ impl SpawnError { !self.is_shutdown } } + +impl fmt::Display for SpawnError { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + write!(fmt, "{}", self.description()) + } +} + +impl Error for SpawnError { + fn description(&self) -> &str { + "attempted to spawn task while the executor is at capacity or shut down" + } +} diff --git a/tokio-reactor/src/lib.rs b/tokio-reactor/src/lib.rs index 381d77af0..4264956fb 100644 --- a/tokio-reactor/src/lib.rs +++ b/tokio-reactor/src/lib.rs @@ -61,6 +61,7 @@ use tokio_executor::Enter; use tokio_executor::park::{Park, Unpark}; use std::{fmt, usize}; +use std::error::Error; use std::io; use std::mem; use std::cell::RefCell; @@ -771,3 +772,17 @@ fn lower_async(new: futures2::Async) -> futures::Async { futures2::Async::Pending => futures::Async::NotReady, } } + +// ===== impl SetFallbackError ===== + +impl fmt::Display for SetFallbackError { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + write!(fmt, "{}", self.description()) + } +} + +impl Error for SetFallbackError { + fn description(&self) -> &str { + "attempted to set fallback reactor while already configured" + } +} diff --git a/tokio-threadpool/src/blocking.rs b/tokio-threadpool/src/blocking.rs index d75ed13ea..fad78f107 100644 --- a/tokio-threadpool/src/blocking.rs +++ b/tokio-threadpool/src/blocking.rs @@ -29,8 +29,8 @@ pub struct BlockingError { /// /// # Return /// -/// When the blocking closure is executed, `Ok(T)` is returned, where `T` is the -/// closure's return value. +/// When the blocking closure is executed, `Ok(Ready(T))` is returned, where +/// `T` is the closure's return value. /// /// If the thread pool has shutdown, `Err` is returned. ///