Add Iterator::try_collect() #308
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes #295
try_collectcan collect from an iterator ofT: Tryinto a containerC<U>that supportsFromIterator<T: Try>to create theC<U>.The actual
Trytypes do not need to supportFromIteratorthen, and this replaces the need forOptionorResultto implementFromIterator, if the user calls.try_collect()instead of.collect().We needed to add another operation on
Trytypes for this, which is to convert fromT: Tryin an error state toU: Tryin an error state, where they have the same (or a convertible) error type. This new concept issus::ops::TryErrorConvertibleToand it's accessed throughsus::ops::try_preserve_error().The
TryErrorConvertibleToconcept is implemented forOption,Resultandstd::optional.Then we also needed a way to take a TryType and a type Bar and produce the type TryType so that we can say try_collect<Vec> on an iterator of Option and get back Option<Vec>. This is done through
sus::ops::TryRemapOutputType<TryType, NewOutputType>.