Skip to content

Commit 109e0d8

Browse files
author
blake2-ppc
committed
std: Convert Result to use external iterators
convert iter() and iter_err() for Result. Use OptionIterator.
1 parent ce682cb commit 109e0d8

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

src/libstd/result.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use clone::Clone;
1616
use cmp::Eq;
1717
use either;
1818
use iterator::Iterator;
19-
use option::{None, Option, Some};
19+
use option::{None, Option, Some, OptionIterator};
2020
use vec;
2121
use vec::{OwnedVector, ImmutableVector};
2222
use container::Container;
@@ -86,15 +86,15 @@ impl<T, E: ToStr> Result<T, E> {
8686
///
8787
/// Example:
8888
///
89-
/// do read_file(file).iter |buf| {
89+
/// for buf in read_file(file) {
9090
/// print_buf(buf)
9191
/// }
9292
#[inline]
93-
pub fn iter(&self, f: &fn(&T)) {
93+
pub fn iter<'r>(&'r self) -> OptionIterator<&'r T> {
9494
match *self {
95-
Ok(ref t) => f(t),
96-
Err(_) => (),
97-
}
95+
Ok(ref t) => Some(t),
96+
Err(*) => None,
97+
}.consume_iter()
9898
}
9999

100100
/// Call a method based on a previous result
@@ -104,11 +104,11 @@ impl<T, E: ToStr> Result<T, E> {
104104
/// immediately returned. This function can be used to pass through a
105105
/// successful result while handling an error.
106106
#[inline]
107-
pub fn iter_err(&self, f: &fn(&E)) {
107+
pub fn iter_err<'r>(&'r self) -> OptionIterator<&'r E> {
108108
match *self {
109-
Ok(_) => (),
110-
Err(ref e) => f(e),
111-
}
109+
Ok(*) => None,
110+
Err(ref t) => Some(t),
111+
}.consume_iter()
112112
}
113113

114114
/// Unwraps a result, yielding the content of an `Ok`.
@@ -335,21 +335,25 @@ mod tests {
335335
#[test]
336336
pub fn test_impl_iter() {
337337
let mut valid = false;
338-
Ok::<~str, ~str>(~"a").iter(|_x| valid = true);
338+
let okval = Ok::<~str, ~str>(~"a");
339+
do okval.iter().next().map |_| { valid = true; };
339340
assert!(valid);
340341
341-
Err::<~str, ~str>(~"b").iter(|_x| valid = false);
342+
let errval = Err::<~str, ~str>(~"b");
343+
do errval.iter().next().map |_| { valid = false; };
342344
assert!(valid);
343345
}
344346
345347
#[test]
346348
pub fn test_impl_iter_err() {
347349
let mut valid = true;
348-
Ok::<~str, ~str>(~"a").iter_err(|_x| valid = false);
350+
let okval = Ok::<~str, ~str>(~"a");
351+
do okval.iter_err().next().map |_| { valid = false };
349352
assert!(valid);
350353
351354
valid = false;
352-
Err::<~str, ~str>(~"b").iter_err(|_x| valid = true);
355+
let errval = Err::<~str, ~str>(~"b");
356+
do errval.iter_err().next().map |_| { valid = true };
353357
assert!(valid);
354358
}
355359

0 commit comments

Comments
 (0)