all-the-errors
A silly little trait with a few methods for getting all the errors out of a
Iterator<Item=Result<T,E>>.
When you bring the trait all_the_errors::CollectAllTheErrors into scope,
it automatically implements 3 methods on Iterators: partition_results,
collect_all_results, and collect_oks_or_iter_errs.
No-std compatible: does not use std internally (although it's
mostly useful with allocation, as in the example below).
Example: collecting into Vecs
For clarity, let's assume you want to collect results into Vecs
(see the docs for the generic signature).
The methods available on an iter: Iterable<Item=Result<T, E>> are:
iter.partition_results() -> (Vec<T>, Vec<E>)iter.collect_results() -> Result<Vec<T>, Vec<E>>iter.collect_oks_or_iter_errs() -> Result<Vec<T>, impl Iterator<Item=E>>
For example:
use CollectAllTheErrors;
assert_eq!;
assert_eq!;
assert_eq!;
Why?
This is useful because, given the stdlib's trait implementations,
Iterator::collect will stop collecting results after the first error
(e.g., collecting an Iterator<Item=Result<T, E>>
into a Result<Vec<T>, E>). So it gives you all the Ts, but just one E.
Iterator::partition gives you the tuple
(Vec<Result<T, E>>, Vec<Result<T,E>>), which is annoying
because you have to unwrap everything your own self
and it requires 2 unnecessary intermediate allocations.
So I use this trait because sometimes I want all the errors - e.g.,
Result<Vec<T>, Vec<E>>, or even all the results as (Vec<T>, Vec<E>).
License and Copyright Boilerplate
- License: This project is provided under the MIT License.
- Copyrightability: All material here was written by (and for) the human authors. No LLM-derived content is present in any form.