diff options
| author | bors <bors@rust-lang.org> | 2019-07-08 01:32:50 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2019-07-08 01:32:50 +0000 |
| commit | db592f4627251cfd8571a05cf8e06a56be9470c2 (patch) | |
| tree | 89d3935978ce188c23f8c7e818a39c5d1655235f /src/libcore | |
| parent | a8247238e3c948bdaf440c8070193a4beea0dd9b (diff) | |
| parent | ada2684c807a257eac75787d98c1c129a2500c92 (diff) | |
| download | rust-db592f4627251cfd8571a05cf8e06a56be9470c2.tar.gz rust-db592f4627251cfd8571a05cf8e06a56be9470c2.zip | |
Auto merge of #62485 - Centril:rollup-gg3it1u, r=Centril
Rollup of 5 pull requests Successful merges: - #62356 (Implement Option::contains and Result::contains) - #62462 (Document `while` keyword) - #62472 (Normalize use of backticks in compiler messages p2) - #62477 (Re-add bootstrap attribute to libunwind for llvm-libunwind feature) - #62478 (normalize use of backticks for compiler messages in librustc_codegen) Failed merges: r? @ghost
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/option.rs | 26 | ||||
| -rw-r--r-- | src/libcore/result.rs | 52 |
2 files changed, 78 insertions, 0 deletions
diff --git a/src/libcore/option.rs b/src/libcore/option.rs index a6bdd5a9063..29169951e46 100644 --- a/src/libcore/option.rs +++ b/src/libcore/option.rs @@ -208,6 +208,32 @@ impl<T> Option<T> { !self.is_some() } + /// Returns `true` if the option is a [`Some`] value containing the given value. + /// + /// # Examples + /// + /// ``` + /// #![feature(option_result_contains)] + /// + /// let x: Option<u32> = Some(2); + /// assert_eq!(x.contains(&2), true); + /// + /// let x: Option<u32> = Some(3); + /// assert_eq!(x.contains(&2), false); + /// + /// let x: Option<u32> = None; + /// assert_eq!(x.contains(&2), false); + /// ``` + #[must_use] + #[inline] + #[unstable(feature = "option_result_contains", issue = "62358")] + pub fn contains<U>(&self, x: &U) -> bool where U: PartialEq<T> { + match self { + Some(y) => x == y, + None => false, + } + } + ///////////////////////////////////////////////////////////////////////// // Adapter for working with references ///////////////////////////////////////////////////////////////////////// diff --git a/src/libcore/result.rs b/src/libcore/result.rs index 8a09877ce1f..b64ad149cf4 100644 --- a/src/libcore/result.rs +++ b/src/libcore/result.rs @@ -309,6 +309,58 @@ impl<T, E> Result<T, E> { !self.is_ok() } + /// Returns `true` if the result is an [`Ok`] value containing the given value. + /// + /// # Examples + /// + /// ``` + /// #![feature(option_result_contains)] + /// + /// let x: Result<u32, &str> = Ok(2); + /// assert_eq!(x.contains(&2), true); + /// + /// let x: Result<u32, &str> = Ok(3); + /// assert_eq!(x.contains(&2), false); + /// + /// let x: Result<u32, &str> = Err("Some error message"); + /// assert_eq!(x.contains(&2), false); + /// ``` + #[must_use] + #[inline] + #[unstable(feature = "option_result_contains", issue = "62358")] + pub fn contains<U>(&self, x: &U) -> bool where U: PartialEq<T> { + match self { + Ok(y) => x == y, + Err(_) => false + } + } + + /// Returns `true` if the result is an [`Err`] value containing the given value. + /// + /// # Examples + /// + /// ``` + /// #![feature(result_contains_err)] + /// + /// let x: Result<u32, &str> = Ok(2); + /// assert_eq!(x.contains_err(&"Some error message"), false); + /// + /// let x: Result<u32, &str> = Err("Some error message"); + /// assert_eq!(x.contains_err(&"Some error message"), true); + /// + /// let x: Result<u32, &str> = Err("Some other error message"); + /// assert_eq!(x.contains_err(&"Some error message"), false); + /// ``` + #[must_use] + #[inline] + #[unstable(feature = "result_contains_err", issue = "62358")] + pub fn contains_err<F>(&self, f: &F) -> bool where F: PartialEq<E> { + match self { + Ok(_) => false, + Err(e) => f == e + } + } + ///////////////////////////////////////////////////////////////////////// // Adapter for each variant ///////////////////////////////////////////////////////////////////////// |
