Use AnyErrorOf in Future::ThenIfSuccess #4803
Closed
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.
Future::ThenIfSuccess
allows to chain a continuation to a future that is only executed when the future completes with no error.In terms of types that means we have a
Future<Result<T, E>>
, call.ThenIfSuccess
with a closureT -> U
orT -> Result<U, E>
and the result will be aFuture<Result<U, E>>
in both cases (that's the status quo).Imagine you want to chain a closure
T -> Result<U, E2>
. This is currently not supported due to the mismatching error types.This changes with this PR.
Future<Result<T, E>>::ThenIfSuccess<T -> Result<U, E2>>()
will result in aFuture<Result<U, AnyErrorOf<E, E2>>>
. That allows easier composition of closures with different error types.Note that this changes the semantics of
ThenIfScuccess
and I had to make some changes in existing code to avoid behavioural changes.