@@ -1212,6 +1212,47 @@ impl<T, E> Result<Result<T, E>, E> {
1212
1212
}
1213
1213
}
1214
1214
1215
+ impl < T > Result < T , T > {
1216
+ /// Gets a reference to the contained value, requiring that the `Ok` and
1217
+ /// `Err` variants have the same type.
1218
+ ///
1219
+ /// # Examples
1220
+ /// ```
1221
+ /// #![feature(result_value)]
1222
+ ///
1223
+ /// let x: Result<u8, u8> = Ok(1);
1224
+ /// assert_eq!(*x.value(), 1);
1225
+ /// let y: Result<u32, u32> = Err(42);
1226
+ /// assert_eq!(*y.value(), 42);
1227
+ /// ```
1228
+ #[ inline]
1229
+ #[ unstable( feature = "result_value" , issue = "none" ) ]
1230
+ pub fn value ( & self ) -> & T {
1231
+ match self {
1232
+ Ok ( ref t) | Err ( ref t) => t,
1233
+ }
1234
+ }
1235
+
1236
+ /// Consumes the Result, returning the contained value. This requires that the `Ok` and `Err`
1237
+ /// variant have the same type. This can be useful when a function returns a `Result` with the
1238
+ /// same information on both variants, e.g.
1239
+ /// [`binary_search`](../../std/primitive.slice.html#method.binary_search)
1240
+ ///
1241
+ /// # Examples
1242
+ /// #![feature(result_value)]
1243
+ ///
1244
+ /// let slice = &[1, 2, 4, 5, 7];
1245
+ /// assert_eq(slice.binary_search(3).into_value(), slice.binary_search(4).into_value());
1246
+ /// ```
1247
+ #[ inline]
1248
+ #[ unstable( feature = "result_value" , issue = "none" ) ]
1249
+ pub fn into_value ( self ) -> T {
1250
+ match self {
1251
+ Ok ( t) | Err ( t) => t,
1252
+ }
1253
+ }
1254
+ }
1255
+
1215
1256
// This is a separate function to reduce the code size of the methods
1216
1257
#[ inline( never) ]
1217
1258
#[ cold]
0 commit comments