Auto merge of #25359 - thepowersgang:result-expect-2, r=alexcrichton

As it says in the title. I've added an `expect` method to `Result` that allows printing both an error message (e.g. what operation was attempted), and the error value. This is separate from the `unwrap` and `ok().expect("message")` behaviours.
This commit is contained in:
bors 2015-06-15 05:11:53 +00:00
commit a54a809219
3 changed files with 34 additions and 0 deletions

View file

@ -731,6 +731,26 @@ pub fn unwrap(self) -> T {
panic!("called `Result::unwrap()` on an `Err` value: {:?}", e)
}
}
/// Unwraps a result, yielding the content of an `Ok`.
///
/// Panics if the value is an `Err`, with a panic message including the
/// passed message, and the content of the `Err`.
///
/// # Examples
/// ```{.should_panic}
/// #![feature(result_expect)]
/// let x: Result<u32, &str> = Err("emergency failure");
/// x.expect("Testing expect"); // panics with `Testing expect: emergency failure`
/// ```
#[inline]
#[unstable(feature = "result_expect", reason = "newly introduced")]
pub fn expect(self, msg: &str) -> T {
match self {
Ok(t) => t,
Err(e) => panic!("{}: {:?}", msg, e),
}
}
}
#[stable(feature = "rust1", since = "1.0.0")]

View file

@ -28,6 +28,7 @@
#![feature(cell_extras)]
#![feature(iter_empty)]
#![feature(iter_once)]
#![feature(result_expect)]
extern crate core;
extern crate test;

View file

@ -137,3 +137,16 @@ fn handler(msg: &'static str) -> isize {
let bad_err: Result<isize, &'static str> = Err("Unrecoverable mess.");
let _ : isize = bad_err.unwrap_or_else(handler);
}
#[test]
pub fn test_expect_ok() {
let ok: Result<isize, &'static str> = Ok(100);
assert_eq!(ok.expect("Unexpected error"), 100);
}
#[test]
#[should_panic(expected="Got expected error: \"All good\"")]
pub fn test_expect_err() {
let err: Result<isize, &'static str> = Err("All good");
err.expect("Got expected error");
}