use cmp::Eq;
use either;
use iterator::Iterator;
-use option::{None, Option, Some};
+use option::{None, Option, Some, OptionIterator};
use vec;
use vec::{OwnedVector, ImmutableVector};
use container::Container;
///
/// Example:
///
- /// do read_file(file).iter |buf| {
+ /// for buf in read_file(file) {
/// print_buf(buf)
/// }
#[inline]
- pub fn iter(&self, f: &fn(&T)) {
+ pub fn iter<'r>(&'r self) -> OptionIterator<&'r T> {
match *self {
- Ok(ref t) => f(t),
- Err(_) => (),
- }
+ Ok(ref t) => Some(t),
+ Err(*) => None,
+ }.consume_iter()
}
/// Call a method based on a previous result
/// immediately returned. This function can be used to pass through a
/// successful result while handling an error.
#[inline]
- pub fn iter_err(&self, f: &fn(&E)) {
+ pub fn iter_err<'r>(&'r self) -> OptionIterator<&'r E> {
match *self {
- Ok(_) => (),
- Err(ref e) => f(e),
- }
+ Ok(*) => None,
+ Err(ref t) => Some(t),
+ }.consume_iter()
}
/// Unwraps a result, yielding the content of an `Ok`.
#[test]
pub fn test_impl_iter() {
let mut valid = false;
- Ok::<~str, ~str>(~"a").iter(|_x| valid = true);
+ let okval = Ok::<~str, ~str>(~"a");
+ do okval.iter().next().map |_| { valid = true; };
assert!(valid);
- Err::<~str, ~str>(~"b").iter(|_x| valid = false);
+ let errval = Err::<~str, ~str>(~"b");
+ do errval.iter().next().map |_| { valid = false; };
assert!(valid);
}
#[test]
pub fn test_impl_iter_err() {
let mut valid = true;
- Ok::<~str, ~str>(~"a").iter_err(|_x| valid = false);
+ let okval = Ok::<~str, ~str>(~"a");
+ do okval.iter_err().next().map |_| { valid = false };
assert!(valid);
valid = false;
- Err::<~str, ~str>(~"b").iter_err(|_x| valid = true);
+ let errval = Err::<~str, ~str>(~"b");
+ do errval.iter_err().next().map |_| { valid = true };
assert!(valid);
}