Implement Option::contains, Result::contains and Result::contains_err
This increases consistency with other common data structures.
This commit is contained in:
parent
088b987307
commit
6f76da494b
@ -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
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
@ -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
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
Reference in New Issue
Block a user