diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-08-09 14:36:47 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-08-13 15:55:03 +0200 |
| commit | 80ddd9d5683b023e7ae20557118c839e59069d83 (patch) | |
| tree | e5ec32fef3759a905f64b2a1cb83a298e40387cd /src/base | |
| parent | 451ec4e34e5e34fc6d89ce2ebe00c342d6c52e9c (diff) | |
| download | qxmpp-80ddd9d5683b023e7ae20557118c839e59069d83.tar.gz | |
FutureUtils: Add mapSuccess() to map success type of variants
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index bf8c2f35..2551be67 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -176,6 +176,21 @@ void reportFinishedResult(QFutureInterface<T> &interface, const T &result) interface.reportFinished(); } +template<typename T, typename Err, typename Function> +auto mapSuccess(std::variant<T, Err> var, Function lambda) +{ + using MapResult = std::decay_t<decltype(lambda({}))>; + using MappedVariant = std::variant<MapResult, Err>; + return std::visit(overloaded { + [lambda = std::move(lambda)](T val) -> MappedVariant { + return lambda(std::move(val)); + }, + [](Err err) -> MappedVariant { + return err; + } }, + std::move(var)); +} + } // namespace QXmpp::Private #endif // QXMPPFUTUREUTILS_P_H |
