@@ -925,6 +925,32 @@ impl<T, E> Result<T, E> {
925
925
self . as_ref ( ) . map ( |t| t. deref ( ) )
926
926
}
927
927
928
+ /// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut <T as DerefMut>::Target, &mut E>`.
929
+ ///
930
+ /// Coerces the [`Ok`] variant of the original [`Result`] via [`DerefMut`](crate::ops::DerefMut)
931
+ /// and returns the new [`Result`].
932
+ ///
933
+ /// # Examples
934
+ ///
935
+ /// ```
936
+ /// let mut s = "HELLO".to_string();
937
+ /// let mut x: Result<String, u32> = Ok("hello".to_string());
938
+ /// let y: Result<&mut str, &mut u32> = Ok(&mut s);
939
+ /// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
940
+ ///
941
+ /// let mut i = 42;
942
+ /// let mut x: Result<String, u32> = Err(42);
943
+ /// let y: Result<&mut str, &mut u32> = Err(&mut i);
944
+ /// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
945
+ /// ```
946
+ #[ stable( feature = "inner_deref" , since = "1.47.0" ) ]
947
+ pub fn as_deref_mut ( & mut self ) -> Result < & mut T :: Target , & mut E >
948
+ where
949
+ T : DerefMut ,
950
+ {
951
+ self . as_mut ( ) . map ( |t| t. deref_mut ( ) )
952
+ }
953
+
928
954
/////////////////////////////////////////////////////////////////////////
929
955
// Iterator constructors
930
956
/////////////////////////////////////////////////////////////////////////
@@ -1532,31 +1558,6 @@ impl<T: Into<!>, E> Result<T, E> {
1532
1558
}
1533
1559
}
1534
1560
1535
- impl < T : DerefMut , E > Result < T , E > {
1536
- /// Converts from `Result<T, E>` (or `&mut Result<T, E>`) to `Result<&mut <T as DerefMut>::Target, &mut E>`.
1537
- ///
1538
- /// Coerces the [`Ok`] variant of the original [`Result`] via [`DerefMut`](crate::ops::DerefMut)
1539
- /// and returns the new [`Result`].
1540
- ///
1541
- /// # Examples
1542
- ///
1543
- /// ```
1544
- /// let mut s = "HELLO".to_string();
1545
- /// let mut x: Result<String, u32> = Ok("hello".to_string());
1546
- /// let y: Result<&mut str, &mut u32> = Ok(&mut s);
1547
- /// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
1548
- ///
1549
- /// let mut i = 42;
1550
- /// let mut x: Result<String, u32> = Err(42);
1551
- /// let y: Result<&mut str, &mut u32> = Err(&mut i);
1552
- /// assert_eq!(x.as_deref_mut().map(|x| { x.make_ascii_uppercase(); x }), y);
1553
- /// ```
1554
- #[ stable( feature = "inner_deref" , since = "1.47.0" ) ]
1555
- pub fn as_deref_mut ( & mut self ) -> Result < & mut T :: Target , & mut E > {
1556
- self . as_mut ( ) . map ( |t| t. deref_mut ( ) )
1557
- }
1558
- }
1559
-
1560
1561
impl < T , E > Result < Option < T > , E > {
1561
1562
/// Transposes a `Result` of an `Option` into an `Option` of a `Result`.
1562
1563
///
0 commit comments