Rollup merge of #73447 - lzutao:stabilize-result_as_deref, r=dtolnay
Improve document for `Result::as_deref(_mut)` methods cc #50264
This commit is contained in:
commit
f15b346f3a
@ -1145,45 +1145,69 @@ impl<T, E: Into<!>> Result<T, E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
#[unstable(feature = "inner_deref", issue = "50264")]
|
||||||
impl<T: Deref, E> Result<T, E> {
|
impl<T: Deref, E> Result<T, E> {
|
||||||
/// Converts from `Result<T, E>` (or `&Result<T, E>`) to `Result<&T::Target, &E>`.
|
/// Converts from `Result<T, E>` (or `&Result<T, E>`) to `Result<&<T as Deref>::Target, &E>`.
|
||||||
///
|
///
|
||||||
/// Leaves the original `Result` in-place, creating a new one containing a reference to the
|
/// Coerces the [`Ok`] variant of the original [`Result`] via [`Deref`](crate::ops::Deref)
|
||||||
/// `Ok` type's `Deref::Target` type.
|
/// and returns the new [`Result`].
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let x: Result<String, u32> = Ok("hello".to_string());
|
||||||
|
/// let y: Result<&str, &u32> = Ok("hello");
|
||||||
|
/// assert_eq!(x.as_deref(), y);
|
||||||
|
///
|
||||||
|
/// let x: Result<String, u32> = Err(42);
|
||||||
|
/// let y: Result<&str, &u32> = Err(&42);
|
||||||
|
/// assert_eq!(x.as_deref(), y);
|
||||||
|
/// ```
|
||||||
pub fn as_deref(&self) -> Result<&T::Target, &E> {
|
pub fn as_deref(&self) -> Result<&T::Target, &E> {
|
||||||
self.as_ref().map(|t| t.deref())
|
self.as_ref().map(|t| t.deref())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
#[unstable(feature = "inner_deref", issue = "50264")]
|
||||||
impl<T, E: Deref> Result<T, E> {
|
impl<T, E: Deref> Result<T, E> {
|
||||||
/// Converts from `Result<T, E>` (or `&Result<T, E>`) to `Result<&T, &E::Target>`.
|
/// Converts from `Result<T, E>` (or `&Result<T, E>`) to `Result<&T, &<E as Deref>::Target>`.
|
||||||
///
|
///
|
||||||
/// Leaves the original `Result` in-place, creating a new one containing a reference to the
|
/// Coerces the [`Err`] variant of the original [`Result`] via [`Deref`](crate::ops::Deref)
|
||||||
/// `Err` type's `Deref::Target` type.
|
/// and returns the new [`Result`].
|
||||||
pub fn as_deref_err(&self) -> Result<&T, &E::Target> {
|
pub fn as_deref_err(&self) -> Result<&T, &E::Target> {
|
||||||
self.as_ref().map_err(|e| e.deref())
|
self.as_ref().map_err(|e| e.deref())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
#[unstable(feature = "inner_deref", issue = "50264")]
|
||||||
impl<T: DerefMut, E> Result<T, E> {
|
impl<T: DerefMut, E> Result<T, E> {
|
||||||
/// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut T::Target, &mut E>`.
|
/// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut <T as DerefMut>::Target, &mut E>`.
|
||||||
///
|
///
|
||||||
/// Leaves the original `Result` in-place, creating a new one containing a mutable reference to
|
/// Coerces the [`Ok`] variant of the original [`Result`] via [`DerefMut`](crate::ops::DerefMut)
|
||||||
/// the `Ok` type's `Deref::Target` type.
|
/// and returns the new [`Result`].
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// let mut x: Result<String, u32> = Ok("hello".to_string());
|
||||||
|
/// let y: Result<&mut str, &mut u32> = Ok("HELLO");
|
||||||
|
/// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
|
||||||
|
///
|
||||||
|
/// let mut x: Result<String, u32> = Err(42);
|
||||||
|
/// let y: Result<&mut str, &mut u32> = Err(&42);
|
||||||
|
/// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
|
||||||
|
/// ```
|
||||||
pub fn as_deref_mut(&mut self) -> Result<&mut T::Target, &mut E> {
|
pub fn as_deref_mut(&mut self) -> Result<&mut T::Target, &mut E> {
|
||||||
self.as_mut().map(|t| t.deref_mut())
|
self.as_mut().map(|t| t.deref_mut())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
|
#[unstable(feature = "inner_deref", issue = "50264")]
|
||||||
impl<T, E: DerefMut> Result<T, E> {
|
impl<T, E: DerefMut> Result<T, E> {
|
||||||
/// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut T, &mut E::Target>`.
|
/// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut T, &mut <E as DerefMut>::Target>`.
|
||||||
///
|
///
|
||||||
/// Leaves the original `Result` in-place, creating a new one containing a mutable reference to
|
/// Coerces the [`Err`] variant of the original [`Result`] via [`DerefMut`](crate::ops::DerefMut)
|
||||||
/// the `Err` type's `Deref::Target` type.
|
/// and returns the new [`Result`].
|
||||||
pub fn as_deref_mut_err(&mut self) -> Result<&mut T, &mut E::Target> {
|
pub fn as_deref_mut_err(&mut self) -> Result<&mut T, &mut E::Target> {
|
||||||
self.as_mut().map_err(|e| e.deref_mut())
|
self.as_mut().map_err(|e| e.deref_mut())
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user