Skip to content

Commit

Permalink
Auto merge of rust-lang#37299 - devonhollowood:result-unwrap-or-defau…
Browse files Browse the repository at this point in the history
…lt, r=alexcrichton

Add `unwrap_or_default` method to `Result`

Fixes rust-lang#37025
  • Loading branch information
bors committed Nov 1, 2016
2 parents 73f5cad + 5d31a81 commit ac968c4
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 0 deletions.
38 changes: 38 additions & 0 deletions src/libcore/result.rs
Expand Up @@ -792,6 +792,44 @@ impl<T: fmt::Debug, E> Result<T, E> {
}
}

impl<T: Default, E> Result<T, E> {
/// Returns the contained value or a default
///
/// Consumes the `self` argument then, if `Ok`, returns the contained
/// value, otherwise if `Err`, returns the default value for that
/// type.
///
/// # Examples
///
/// Convert a string to an integer, turning poorly-formed strings
/// into 0 (the default value for integers). [`parse`] converts
/// a string to any other type that implements [`FromStr`], returning an
/// `Err` on error.
///
/// ```
/// #![feature(result_unwrap_or_default)]
///
/// let good_year_from_input = "1909";
/// let bad_year_from_input = "190blarg";
/// let good_year = good_year_from_input.parse().unwrap_or_default();
/// let bad_year = bad_year_from_input.parse().unwrap_or_default();
///
/// assert_eq!(1909, good_year);
/// assert_eq!(0, bad_year);
///
/// [`parse`]: ../../std/primitive.str.html#method.parse
/// [`FromStr`]: ../../std/str/trait.FromStr.html
/// ```
#[inline]
#[unstable(feature = "result_unwrap_or_default", issue = "0")]
pub fn unwrap_or_default(self) -> T {
match self {
Ok(x) => x,
Err(_) => Default::default(),
}
}
}

// This is a separate function to reduce the code size of the methods
#[inline(never)]
#[cold]
Expand Down
1 change: 1 addition & 0 deletions src/libcoretest/lib.rs
Expand Up @@ -34,6 +34,7 @@
#![feature(unique)]
#![feature(iter_max_by)]
#![feature(iter_min_by)]
#![feature(result_unwrap_or_default)]

extern crate core;
extern crate test;
Expand Down
6 changes: 6 additions & 0 deletions src/libcoretest/result.rs
Expand Up @@ -183,3 +183,9 @@ pub fn test_iter_mut() {
}
assert_eq!(err, Err("error"));
}

#[test]
pub fn test_unwrap_or_default() {
assert_eq!(op1().unwrap_or_default(), 666);
assert_eq!(op2().unwrap_or_default(), 0);
}

0 comments on commit ac968c4

Please sign in to comment.