summaryrefslogtreecommitdiffstats
path: root/third_party/rust/tokio-executor/src/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/tokio-executor/src/error.rs')
-rw-r--r--third_party/rust/tokio-executor/src/error.rs50
1 files changed, 50 insertions, 0 deletions
diff --git a/third_party/rust/tokio-executor/src/error.rs b/third_party/rust/tokio-executor/src/error.rs
new file mode 100644
index 0000000000..579239f089
--- /dev/null
+++ b/third_party/rust/tokio-executor/src/error.rs
@@ -0,0 +1,50 @@
+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, "{}", self.description())
+ }
+}
+
+impl Error for SpawnError {
+ fn description(&self) -> &str {
+ "attempted to spawn task while the executor is at capacity or shut down"
+ }
+}