Rollup merge of #93051 - m-ou-se:is-some-with, r=yaahc
Add Option::is_some_with and Result::is_{ok,err}_with See https://github.com/rust-lang/rust/issues/62358#issuecomment-1015827777
This commit is contained in:
commit
d5bc168d65
@ -551,6 +551,29 @@ impl<T> Option<T> {
|
||||
matches!(*self, Some(_))
|
||||
}
|
||||
|
||||
/// Returns `true` if the option is a [`Some`] wrapping a value matching the predicate.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(is_some_with)]
|
||||
///
|
||||
/// let x: Option<u32> = Some(2);
|
||||
/// assert_eq!(x.is_some_with(|&x| x > 1), true);
|
||||
///
|
||||
/// let x: Option<u32> = Some(0);
|
||||
/// assert_eq!(x.is_some_with(|&x| x > 1), false);
|
||||
///
|
||||
/// let x: Option<u32> = None;
|
||||
/// assert_eq!(x.is_some_with(|&x| x > 1), false);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[inline]
|
||||
#[unstable(feature = "is_some_with", issue = "93050")]
|
||||
pub fn is_some_with(&self, f: impl FnOnce(&T) -> bool) -> bool {
|
||||
matches!(self, Some(x) if f(x))
|
||||
}
|
||||
|
||||
/// Returns `true` if the option is a [`None`] value.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -542,6 +542,29 @@ impl<T, E> Result<T, E> {
|
||||
matches!(*self, Ok(_))
|
||||
}
|
||||
|
||||
/// Returns `true` if the result is [`Ok`] wrapping a value matching the predicate.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(is_some_with)]
|
||||
///
|
||||
/// let x: Result<u32, &str> = Ok(2);
|
||||
/// assert_eq!(x.is_ok_with(|&x| x > 1), true);
|
||||
///
|
||||
/// let x: Result<u32, &str> = Ok(0);
|
||||
/// assert_eq!(x.is_ok_with(|&x| x > 1), false);
|
||||
///
|
||||
/// let x: Result<u32, &str> = Err("hey");
|
||||
/// assert_eq!(x.is_ok_with(|&x| x > 1), false);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[inline]
|
||||
#[unstable(feature = "is_some_with", issue = "93050")]
|
||||
pub fn is_ok_with(&self, f: impl FnOnce(&T) -> bool) -> bool {
|
||||
matches!(self, Ok(x) if f(x))
|
||||
}
|
||||
|
||||
/// Returns `true` if the result is [`Err`].
|
||||
///
|
||||
/// # Examples
|
||||
@ -563,6 +586,30 @@ impl<T, E> Result<T, E> {
|
||||
!self.is_ok()
|
||||
}
|
||||
|
||||
/// Returns `true` if the result is [`Err`] wrapping a value matching the predicate.
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(is_some_with)]
|
||||
/// use std::io::{Error, ErrorKind};
|
||||
///
|
||||
/// let x: Result<u32, Error> = Err(Error::new(ErrorKind::NotFound, "!"));
|
||||
/// assert_eq!(x.is_err_with(|x| x.kind() == ErrorKind::NotFound), true);
|
||||
///
|
||||
/// let x: Result<u32, Error> = Err(Error::new(ErrorKind::PermissionDenied, "!"));
|
||||
/// assert_eq!(x.is_err_with(|x| x.kind() == ErrorKind::NotFound), false);
|
||||
///
|
||||
/// let x: Result<u32, Error> = Ok(123);
|
||||
/// assert_eq!(x.is_err_with(|x| x.kind() == ErrorKind::NotFound), false);
|
||||
/// ```
|
||||
#[must_use]
|
||||
#[inline]
|
||||
#[unstable(feature = "is_some_with", issue = "93050")]
|
||||
pub fn is_err_with(&self, f: impl FnOnce(&E) -> bool) -> bool {
|
||||
matches!(self, Err(x) if f(x))
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// Adapter for each variant
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
Loading…
x
Reference in New Issue
Block a user