about summary refs log tree commit diff
path: root/src/libstd/io
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2014-11-03 03:57:18 +0000
committerbors <bors@rust-lang.org>2014-11-03 03:57:18 +0000
commitff50f24feb512075f3fcf9fc2801e4c853ff9316 (patch)
tree9842337cf63e33f73bed8ba4ee681a6a3e9549f5 /src/libstd/io
parentdcc5c3b31b294a19c369e7b1926528610230686d (diff)
parent38e0745e3f5e6c772c973c1d0b73abb0b20faba0 (diff)
downloadrust-ff50f24feb512075f3fcf9fc2801e4c853ff9316.tar.gz
rust-ff50f24feb512075f3fcf9fc2801e4c853ff9316.zip
auto merge of #17753 : aturon/rust/error-interop, r=alexcrichton
This PR:

* Adds the error interoperation traits (`Error` and `FromError`) to a new module, `std::error`, as per [RFC 70](https://github.com/rust-lang/rfcs/blob/master/active/0070-error-chaining.md). Note that this module must live in `std` in order to refer to `String`.

    Note that, until multidispatch lands, the `FromError` trait cannot be
usefully implemented outside of the blanket impl given here.

* Incorporates `std::error::FromError` into the `try!` macro.

* Implements `Error` for most existing error enumerations.

Closes #17747
Diffstat (limited to 'src/libstd/io')
-rw-r--r--src/libstd/io/mod.rs18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/libstd/io/mod.rs b/src/libstd/io/mod.rs
index c6f237ff1da..3dcd8d792a4 100644
--- a/src/libstd/io/mod.rs
+++ b/src/libstd/io/mod.rs
@@ -222,7 +222,9 @@ responding to errors that may occur while attempting to read the numbers.
 #![deny(unused_must_use)]
 
 use char::Char;
+use clone::Clone;
 use default::Default;
+use error::{FromError, Error};
 use fmt;
 use int;
 use iter::Iterator;
@@ -433,6 +435,22 @@ impl fmt::Show for IoError {
     }
 }
 
+impl Error for IoError {
+    fn description(&self) -> &str {
+        self.desc
+    }
+
+    fn detail(&self) -> Option<String> {
+        self.detail.clone()
+    }
+}
+
+impl FromError<IoError> for Box<Error> {
+    fn from_error(err: IoError) -> Box<Error> {
+        box err
+    }
+}
+
 /// A list specifying general categories of I/O error.
 #[deriving(PartialEq, Eq, Clone, Show)]
 pub enum IoErrorKind {