|
145 | 145 |
|
146 | 146 | use cmp::{PartialEq, Eq, Ord};
|
147 | 147 | use default::Default;
|
148 |
| -use slice::Slice; |
149 | 148 | use iter::{Iterator, DoubleEndedIterator, FromIterator, ExactSize};
|
150 | 149 | use mem;
|
| 150 | +use result::{Result, Ok, Err}; |
151 | 151 | use slice;
|
| 152 | +use slice::Slice; |
152 | 153 |
|
153 | 154 | // Note that this is not a lang item per se, but it has a hidden dependency on
|
154 | 155 | // `Iterator`, which is one. The compiler assumes that the `next` method of
|
@@ -439,6 +440,48 @@ impl<T> Option<T> {
|
439 | 440 | match self { None => def(), Some(t) => f(t) }
|
440 | 441 | }
|
441 | 442 |
|
| 443 | + /// Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to |
| 444 | + /// `Ok(v)` and `None` to `Err(err)`. |
| 445 | + /// |
| 446 | + /// # Example |
| 447 | + /// |
| 448 | + /// ``` |
| 449 | + /// let x = Some("foo"); |
| 450 | + /// assert_eq!(x.ok_or(0i), Ok("foo")); |
| 451 | + /// |
| 452 | + /// let x: Option<&str> = None; |
| 453 | + /// assert_eq!(x.ok_or(0i), Err(0i)); |
| 454 | + /// ``` |
| 455 | + #[inline] |
| 456 | + #[experimental] |
| 457 | + pub fn ok_or<E>(self, err: E) -> Result<T, E> { |
| 458 | + match self { |
| 459 | + Some(v) => Ok(v), |
| 460 | + None => Err(err), |
| 461 | + } |
| 462 | + } |
| 463 | + |
| 464 | + /// Transforms the `Option<T>` into a `Result<T, E>`, mapping `Some(v)` to |
| 465 | + /// `Ok(v)` and `None` to `Err(err())`. |
| 466 | + /// |
| 467 | + /// # Example |
| 468 | + /// |
| 469 | + /// ``` |
| 470 | + /// let x = Some("foo"); |
| 471 | + /// assert_eq!(x.ok_or_else(|| 0i), Ok("foo")); |
| 472 | + /// |
| 473 | + /// let x: Option<&str> = None; |
| 474 | + /// assert_eq!(x.ok_or_else(|| 0i), Err(0i)); |
| 475 | + /// ``` |
| 476 | + #[inline] |
| 477 | + #[experimental] |
| 478 | + pub fn ok_or_else<E>(self, err: || -> E) -> Result<T, E> { |
| 479 | + match self { |
| 480 | + Some(v) => Ok(v), |
| 481 | + None => Err(err()), |
| 482 | + } |
| 483 | + } |
| 484 | + |
442 | 485 | /// Deprecated.
|
443 | 486 | ///
|
444 | 487 | /// Applies a function to the contained value or does nothing.
|
|
0 commit comments