diff options
| author | bors <bors@rust-lang.org> | 2017-01-14 17:33:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-01-14 17:33:46 +0000 |
| commit | 2f9dedb528d40a46c47c9970b30cc3e2fdd1e0bb (patch) | |
| tree | 8799645d76d2f7dbb2c19082235cf5b0551fdd37 | |
| parent | d4b063de86a061041285bd97af7c059fc7168fab (diff) | |
| parent | e520b77efed718dd6ba4509f5a8d5860ad80e660 (diff) | |
| download | rust-2f9dedb528d40a46c47c9970b30cc3e2fdd1e0bb.tar.gz rust-2f9dedb528d40a46c47c9970b30cc3e2fdd1e0bb.zip | |
Auto merge of #38982 - clarcharr:expect_err, r=aturon
expect_err for Result. This adds an `expect_err` method to `Result`. Considering how `unwrap_err` already exists, this seems to make sense. Inconsistency noted in Manishearth/rust-clippy#1435.
| -rw-r--r-- | src/libcore/result.rs | 25 | ||||
| -rw-r--r-- | src/libcoretest/lib.rs | 1 | ||||
| -rw-r--r-- | src/libcoretest/result.rs | 13 |
3 files changed, 39 insertions, 0 deletions
diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 99c407e5273..f02df88bb2e 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -798,6 +798,31 @@ impl<T: fmt::Debug, E> Result<T, E> { Err(e) => e, } } + + /// Unwraps a result, yielding the content of an `Err`. + /// + /// # Panics + /// + /// Panics if the value is an `Ok`, with a panic message including the + /// passed message, and the content of the `Ok`. + /// + /// # Examples + /// + /// Basic usage: + /// + /// ```{.should_panic} + /// # #![feature(result_expect_err)] + /// let x: Result<u32, &str> = Ok(10); + /// x.expect_err("Testing expect_err"); // panics with `Testing expect_err: 10` + /// ``` + #[inline] + #[unstable(feature = "result_expect_err", issue = "39041")] + pub fn expect_err(self, msg: &str) -> E { + match self { + Ok(t) => unwrap_failed(msg, t), + Err(e) => e, + } + } } impl<T: Default, E> Result<T, E> { diff --git a/src/libcoretest/lib.rs b/src/libcoretest/lib.rs index d12616a97a6..ee47b510ee0 100644 --- a/src/libcoretest/lib.rs +++ b/src/libcoretest/lib.rs @@ -23,6 +23,7 @@ #![feature(nonzero)] #![feature(rand)] #![feature(raw)] +#![feature(result_expect_err)] #![feature(sip_hash_13)] #![feature(slice_patterns)] #![feature(step_by)] diff --git a/src/libcoretest/result.rs b/src/libcoretest/result.rs index bc2cd8bbfc6..4c5f19dee12 100644 --- a/src/libcoretest/result.rs +++ b/src/libcoretest/result.rs @@ -151,6 +151,19 @@ pub fn test_expect_err() { err.expect("Got expected error"); } + +#[test] +pub fn test_expect_err_err() { + let ok: Result<&'static str, isize> = Err(100); + assert_eq!(ok.expect_err("Unexpected ok"), 100); +} +#[test] +#[should_panic(expected="Got expected ok: \"All good\"")] +pub fn test_expect_err_ok() { + let err: Result<&'static str, isize> = Ok("All good"); + err.expect_err("Got expected ok"); +} + #[test] pub fn test_iter() { let ok: Result<isize, &'static str> = Ok(100); |
