Skip to content

Commit

Permalink
Merge pull request #1509 from scottmcm/map-err-ok
Browse files Browse the repository at this point in the history
Add an example of collecting errors while iterating successes
  • Loading branch information
marioidival authored Feb 26, 2022
2 parents 21807dc + 2be9574 commit 5ad4f97
Showing 1 changed file with 19 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/error/iter_result.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,25 @@ fn main() {
}
```

## Collect the failed items with `map_err()` and `filter_map()`

`map_err` calls a function with the error, so by adding that to the previous
`filter_map` solution we can save them off to the side while iterating.

```rust,editable
fn main() {
let strings = vec!["42", "tofu", "93", "999", "18"];
let mut errors = vec![];
let numbers: Vec<_> = strings
.into_iter()
.map(|s| s.parse::<u8>())
.filter_map(|r| r.map_err(|e| errors.push(e)).ok())
.collect();
println!("Numbers: {:?}", numbers);
println!("Errors: {:?}", errors);
}
```

## Fail the entire operation with `collect()`

`Result` implements `FromIter` so that a vector of results (`Vec<Result<T, E>>`)
Expand Down

0 comments on commit 5ad4f97

Please sign in to comment.