aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-08-09 14:36:47 +0200
committerLinus Jahn <lnj@kaidan.im>2022-08-13 15:55:03 +0200
commit80ddd9d5683b023e7ae20557118c839e59069d83 (patch)
treee5ec32fef3759a905f64b2a1cb83a298e40387cd /src/base
parent451ec4e34e5e34fc6d89ce2ebe00c342d6c52e9c (diff)
downloadqxmpp-80ddd9d5683b023e7ae20557118c839e59069d83.tar.gz
FutureUtils: Add mapSuccess() to map success type of variants
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppFutureUtils_p.h15
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